Android DOM解析xml

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

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/product"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
         />
</LinearLayout>

 

在assets目录下添加special_local_products.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>

 

Products类

package com.worldchip;

import java.io.Serializable;

public class Products implements Serializable
{
 /**对应于special_local_products.xml里面的元素,映射
  *
  */
 private static final long serialVersionUID = 1L;
 private int length;
 private String introducton;
 private String imageurl;
 private String name;
 
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = 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;
 }
 
}

 

 

Xml_DomActivity 类,用于解析XML

package com.worldchip;

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.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class Xml_DomActivity extends Activity {
 
 private TextView text;
    /** Called when the activity is first created. */
    @SuppressWarnings("null")
 @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        text=(TextView) findViewById(R.id.product);
        StringBuffer sb=new StringBuffer();
        ArrayList<Products> list=    (ArrayList<Products>) getProductFromXml("special_local_products.xml");
        Iterator<Products> it=list.iterator();
     while(it.hasNext())
     {
      Products myit=it.next();
      sb.append(myit.getName()+"        长度:"+myit.getLength()+"\n"+myit.getImageurl() +"\n"+myit.getIntroducton()+"\n\n");
     }
     Log.i("wa~~~~~",sb.toString());
     text.setText(sb.toString());
    }
   
    public List<Products> getProductFromXml(String fileName)
    {
     List<Products> products=new ArrayList<Products>();
     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");
   //遍历所有子结点
   Products myproduct=null;
   for(int i=0;i<nodes.getLength();i++)
   {
    myproduct =new Products();
    //得到第一个根节点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 Auto-generated catch block
   e.printStackTrace();
  }
  return products;
     
    }
}

 

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

posted on 2012-03-10 12:26  juuee  阅读(226)  评论(0)    收藏  举报

导航