android用dom解析xml,【Android进阶】解析XML文件之使用DOM解析器

在前面的文章中,介绍了使用SAX解析器对XML文件进行解析,SAX解析器的优点就是占用内存小。这篇文章主要介绍使用DOM解析器对XML文件进行解析。DOM解析器的优点可能是理解起来比较的直观,当然,每个人对不同的解析方法可能有不同的喜好。但是DOM解析器有个比较大的缺点,就是占用内存比较多,在Android中的XML解析中,还是更推荐其他的解析方式。

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

下面是我们需要解析的xml文件

liming

30

lixiangmei

25

我们的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 getPersons(InputStream inputStream) throws Exception {

List persons = new ArrayList();

// 获取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 persons = DOMResovel.getPersons(inStream);

for (Person person : persons) {

Log.i(TAG, person.toString());

}

}

下面是解析结果

cb7e0d66182acf8e113bffc54b685542.png

有疑问可以留言

原文:http://blog.csdn.net/bz419927089/article/details/28256051

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值