在前面的文章中。介绍了使用SAX解析器对XML文件进行解析。SAX解析器的长处就是占用内存小。这篇文章主要介绍使用DOM解析器对XML文件进行解析。

DOM解析器的长处可能是理解起来比較的直观,当然,每一个人对不同的解析方法可能有不同的喜好。可是DOM解析器有个比較大的缺点,就是占用内存比較多。在Android中的XML解析中,还是更推荐其它的解析方式。

以下介绍使用DOM解析器对XML进行解析。

以下是我们须要解析的xml文件

<?xml version="1.0" encoding="UTF-8"?

>
<persons>
<person id="23">
<name>liming</name>
<age>30</age>
</person>
<person id="20">
<name>lixiangmei</name>
<age>25</age>
</person>
</persons>

我们的person实体类

public class Person {
private Integer id;
private String name;
private Short age; public Person(){} public Person(Integer id, String name, Short age) {
this.id = id;
this.name = name;
this.age = age;
} public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
}
@Override
public String toString() {
return "Person [age=" + age + ", id=" + id + ", name=" + name + "]";
} }

我们的解析代码。由于凝视比較多,所以只是多解释。

/**
* 採用DOM对XML进行解析
*
* @author ZhaoKaiQiang
*
* @time 2014年6月3日
*/
public class DOMResovel { public static List<Person> getPersons(InputStream inputStream) throws Exception { List<Person> persons = new ArrayList<Person>();
// 获取DOM解析器
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
// 获取解析好的文档树
Document document = documentBuilder.parse(inputStream);
// 获取根元素节点
Element root = document.getDocumentElement();
// 获取根元素以下的所以person节点
NodeList personList = root.getElementsByTagName("person");
//遍历全部的person节点
for (int i = 0; i < personList.getLength(); i++) {
Person person = new Person();
// 获取每个person节点
Element personElement = (Element) personList.item(i);
//设置person对象属性
person.setId(new Integer(personElement.getAttribute("id")));
// 获取person以下的子节点
NodeList childList = personElement.getChildNodes();
// 遍历子节点
for (int j = 0; j < childList.getLength(); j++) {
//推断是否是元素节点
if (childList.item(j).getNodeType() == Node.ELEMENT_NODE) {
Element chilElement = (Element) childList.item(j);
if ("name".equals(chilElement.getNodeName())) {
person.setName(chilElement.getFirstChild().getNodeValue());
} else if ("age".equals(chilElement.getNodeName())) {
person.setAge(new Short(chilElement.getFirstChild().getNodeValue()));
}
}
}
persons.add(person);
} return persons;
} }

以下是我们的单元測试方法,对解析器进行单元測试

public void testDom() throws Exception {
InputStream inStream = getClass().getClassLoader().getResourceAsStream("persons.xml");
List<Person> persons = DOMResovel.getPersons(inStream); for (Person person : persons) {
Log.i(TAG, person.toString());
} }

以下是解析结果

有疑问能够留言

解析XML文件之使用DOM解析器的更多相关文章

  1. Java是如何解析xml文件的(DOM)

    Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX ...

  2. 解析XML文件之使用SAM解析器

    XML是一种常见的传输数据方式,所以在开发中,我们会遇到对XML文件进行解析的时候,本篇主要介绍使用SAM解析器,对XML文件进行解析. SAX解析器的长处是显而易见的.那就是SAX并不须要将全部的文 ...

  3. android解析xml文件方法之一-----DOM

    Hello.xml文件 <dict num="219" id="219" name="219"> <key>hell ...

  4. Python解析xml文件遇到的编码解析的问题

    使用python对xml文件进行解析的时候,假设xml文件的头文件是utf-8格式的编码,那么解析是ok的,但假设是其它格式将会出现例如以下异常: xml.parsers.expat.ExpatErr ...

  5. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  6. 解析xml文件的四种方式

    什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没 ...

  7. Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

  8. java解析XML文件四种方法之引入源文件

    1.DOM解析(官方) try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();         Documen ...

  9. dom4j生成和解析xml文件

    dom4j生成和解析xml文件 要生成和解析如下格式的xml文件: <?xml version="1.0" encoding="UTF-8"?> & ...

随机推荐

  1. activity的23张表

    --二进制数据表 SELECT * FROM act_ge_bytearray; --属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录, SELECT * FROM act_g ...

  2. POJ-3348 Cows 计算几何 求凸包 求多边形面积

    题目链接:https://cn.vjudge.net/problem/POJ-3348 题意 啊模版题啊 求凸包的面积,除50即可 思路 求凸包的面积,除50即可 提交过程 AC 代码 #includ ...

  3. 一个 VUE 组件:实现子元素 scroll 父元素容器不跟随滚动(兼容PC、移动端)

    介绍 我们经常遇到一种情况.当滑动滚动条区域时,子元素滚动条到底部或顶部时就会触发父级滚动条,父级滚动条同理会继续向上触发,直至body容器.这是浏览器默认的滚动行为. 但是很多情况,我们想要子元素滚 ...

  4. SpringBoot实战(一)HelloWorld

    一:环境准备: JDK:1.8版本 Maven:3.5版本(如果觉得下载速度慢,可以切换为阿里镜向地址) Intellij:2018.2.1版本 二:实际操作: 1.在Intellij中创建一个新的S ...

  5. C++虚函数与纯虚函数用法与区别

    1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class) ...

  6. tomcat怎样禁止显示文件夹和文件列表

    查看原文:http://www.ibloger.net/article/300.html Tomcat禁止显示文件夹和文件列表 打开   tomcat的安装文件夹/conf/web.xml 文件 &l ...

  7. Linux下安装过程中编译PHP时报错:configure: error: libjpeg.(a|so) not found

    在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决的方法: 检查之后发现已经安装libjpeg.可是/usr/l ...

  8. Django Admin site 显示问题

    Django Admin site 显示问题 今天配置了一下Django admin site,可是admin site的显示有一些问题,当我打开源码.訪问里面的admin 的css 文件时候,htt ...

  9. MFC中CFileDialog使用方法

    用CFileDialog选择了一个文件后,使用FILE::fopen打开文件错误,使用 的是相对地址.和王工调试了半天,怎么跟踪也没发现错误,原来如此. .... .. . . CFileDialog ...

  10. js中如何取精度

    js中如何取精度 一.总结 一句话总结:其实round()函数去经度会有误差,直接用num.toFixed(2)简单方便. toFixed()方法会按照指定的小数返回数值的字符串表示.var num ...