zoukankan      html  css  js  c++  java
  • Android DOM解析XML示例程序

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

    activity_main.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文件

    <?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类

    /**
     * 
     */
    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并显示结果

    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()+"
    "+myit.getImageurl() +"
    "+myit.getIntroducton()+"
    
    ");
             }
             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

  • 相关阅读:
    ffmpeg文档03-详细说明
    ffmpeg文档01-命令语法
    ffmpeg文档02-描述/概览
    OpenWrt使用花生壳脚本
    upc 9315 Philosopher’s Walk
    upc 9312 Game Map
    hdu 1251 统计难题
    Trie树简要讲解
    [算法]一次商品交易利益最大化
    [c语言]左移和右移
  • 原文地址:https://www.cnblogs.com/hyzhou/p/3289082.html
Copyright © 2011-2022 走看看