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>

在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>

创建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;
} }

创建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()+"\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; } }

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

Android DOM解析XML示例程序的更多相关文章

  1. Android DOM解析XML方法及优化

    在Android应用开发中,我们常常要在应用启动后从服务器下载一些配置文件,这些配置文件包含一些项目中可能用到的资源,这些文件很多情况下是XML文件,这时就要将XML下载到文件中保存,之后再解析XML ...

  2. android DOM解析Xml

    文章转自:http://blog.sina.com.cn/s/blog_a661f16c0101d5qp.html People类是自己写的一个类,主要保存各个字符串数据.   由于没学过Xml语法只 ...

  3. Android之DOM解析XML

    一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...

  4. Java从零开始学四十二(DOM解析XML)

    一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone ...

  5. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

  6. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  7. [置顶] Android学习系列-Android中解析xml(7)

    Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ...

  8. Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  9. Java解析XML文档——dom解析xml

    一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...

随机推荐

  1. {{ }} 和ng-bind

    花括号最后会转换成ng-bind,在一次加载数据的时候,显示花括号,所以使用ng-bind 或者ng-bind-html

  2. python匹配两个字符串中间的字符串

    问题:使用python正则如何匹配两字符串中间的字符串解决:使用re模块的findall,注意,re.match是只能从开头匹配的方法: import re html_str = '</a> ...

  3. jquery 拦截 post 等请求实现aop效果

    $(function(){ jQuery.extend({ put: function( url, data, callback, type ) { // shift arguments if dat ...

  4. mysql sleep进程 过多

    如果你没有修改过MySQL的配置,缺省情况下,wait_timeout的初始值是28800. wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能, ...

  5. 3DES加密算法32个字节

    简介 最近开发的一个项目,使用到了3DES加密算法,加密socket服务端和客户端通信的报文,因为加密秘钥是32个字节,结果折腾了一番,现在记录下来分享! 1.Des3EncryptUtils.jav ...

  6. 数据库——IN、ANY、SOME 和 ALL 操作符的使用

    sql中all,any,some用法 简介: --All:对所有数据都满足条件,整个条件才成立,例如:5大于所有返回的id select * from #A where 5>All(select ...

  7. IP数据包格式

    IP数据包格式 0 4 8 16 31 |4位版本 | 4位首部长度 | 8位服务类型 | 16位总长度(字节数)| |16位标识 | 3位标志 | 13位片偏移 | |8位生存时间| 8位协议 | ...

  8. ElasticSearch自定义分析器-集成结巴分词插件

    关于结巴分词 ElasticSearch 插件: https://github.com/huaban/elasticsearch-analysis-jieba 该插件由huaban开发.支持Elast ...

  9. 彻底解决java WEB项目的文件路径问题(war包)

    在j2EE项目中,我们通常会把项目打包公布,通常是war包,作为独立单元,能够远程上传,载入,公布,还能够实现版本号控制,但这与我们开发过程中使用MyEclipse自己主动部署有所不同,下面做具体说明 ...

  10. jquery 新建的元素事件绑定问题研究[转]

    原文:http://www.cnblogs.com/linzheng/archive/2010/10/17/1853568.html js的事件监听跟css不一样,css只要设定好了样式,不论是原来就 ...