Android DOM解析XML示例程序

DOM方式解析xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据的。DOM比较符合人的思维模式,但是其对内存的消耗比较大。

activity_main.xml

Android DOM解析XML示例程序
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical"

    tools:context=".MainActivity" >



    <TextView

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:id="@+id/textview01" />



</LinearLayout>
View Code

在assets目录下添加product.xml文件

Android DOM解析XML示例程序
<?xml version="1.0" encoding="UTF-8"?>

<products>

    <product name="黑茶" length="115">

        <introducton>

因产自中国湖南安化县而得名。是中国古代名茶之一,上个世纪50年代曾一度绝产,以至于默默无名。2010年,湖南黑茶走进中国上海世博会,成为中国世博会十大名茶之一。安化黑茶再度走进茶人的视野,成为茶人的新宠。其特色的千两茶,堪称一绝。<br/>   

        </introducton>

        <imageurl>

            http://baike.baidu.com/view/2255732.htm

        </imageurl>

    </product>

    <product name="擂茶" length="109">

        <introducton>

起于汉、盛于明清的地方擂茶至今在湖南中部以北的安化一带传袭。其色味、功效、制作方法,以及饮茶习俗等,无不让途经于此的人感受到山乡古朴浓郁的擂茶文化。春暖花开的四月,记者跟随“环行洞庭湖”采访团走进了这个擂茶飘香的地方。<br/>           

        </introducton>

        <imageurl>

            http://baike.baidu.com/view/66985.htm

        </imageurl>

    </product>

</products>
View Code

创建Product类

Android DOM解析XML示例程序
/**

 * 

 */

package com.hyzhou.domxml2;



import java.io.Serializable;



/**

 * @author hyzhou

 *

 * 2013-8-29

 */

public class Product implements Serializable {



    /**

     * 

     */

    private static final long serialVersionUID = -6907670870626810002L;

    private int length;

    private String introducton;

    private String imageurl;

    private String name;

    public int getLength() {

        return length;

    }

    public void setLength(int length) {

        this.length = length;

    }

    public String getIntroducton() {

        return introducton;

    }

    public void setIntroducton(String introducton) {

        this.introducton = introducton;

    }

    public String getImageurl() {

        return imageurl;

    }

    public void setImageurl(String imageurl) {

        this.imageurl = imageurl;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    

}
View Code

创建MainActivity类,用于解析XML并显示结果

Android DOM解析XML示例程序
package com.hyzhou.domxml2;



import java.io.InputStream;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;



import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;



import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;



import android.os.Bundle;

import android.util.Log;

import android.widget.TextView;

import android.app.Activity;



public class MainActivity extends Activity {

    private TextView    textView ;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        textView=(TextView)findViewById(R.id.textview01);

         StringBuffer sb=new StringBuffer();

            ArrayList<Product> list=    (ArrayList<Product>) getProductFromXml("product.xml");

            Iterator<Product> it=list.iterator();

         while(it.hasNext())

         {

          Product myit=it.next();

          sb.append(myit.getName()+"        长度:"+myit.getLength()+"\n"+myit.getImageurl() +"\n"+myit.getIntroducton()+"\n\n");

         }

         Log.i("wa~~~~~",sb.toString());

         textView.setText(sb.toString());

    }

    public List<Product> getProductFromXml(String fileName)

    {

        List<Product> products=new ArrayList<Product>();

        DocumentBuilderFactory factory=null;

         DocumentBuilder builder=null;

         Document document=null;

         InputStream inputStream=null;

         //创建实例DocumentBuilderFactory

         factory=DocumentBuilderFactory.newInstance();

         try {

            //创建DocumentBuilder

               builder=factory.newDocumentBuilder();

               //获取输入流

               inputStream=this.getResources().getAssets().open(fileName);

               Log.i("inputStream", inputStream.toString());

               //加载XML文档

               document=builder.parse(inputStream);

             //找到根元素

               Element root=document.getDocumentElement();

               NodeList nodes=root.getElementsByTagName("product");

               

               //遍历所有子结点

               Product myproduct=null;

               for(int i=0;i<nodes.getLength();i++)

               {

                myproduct =new Product();

                //得到第一个根节点product

                Element productElement=(Element) nodes.item(i);  

                   //获取根节点的属性name和length

                myproduct.setName(productElement.getAttribute("name"));

                myproduct.setLength(Integer.parseInt(productElement.getAttribute("length")));

                //获取子节点imageulr和introduction

                Element introduction =(Element) productElement.getElementsByTagName("introducton").item(0);

                myproduct.setIntroducton(introduction.getTextContent().trim());

                Element imageurl=(Element) productElement.getElementsByTagName("imageurl").item(0);

                myproduct.setImageurl(imageurl.getTextContent().trim());

                //把得到的元素加入到List里面

                products.add(myproduct);

               }

               inputStream.close();

        } catch (Exception e) {

            // TODO: handle exception

            e.printStackTrace();

        }

        return products;

        

    }

    

    

}
View Code

 

参考文档:http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016434.html

你可能感兴趣的:(dom解析xml)