android采用DOM解析xml文档

在这里介绍一下在android中使用DOM解析技术来解析xml文档,同样首先我们要认识到DOM解析xml的原理:DOM解析主要是先把整个xml文档加载到内存中去让后有android系统来完成对文档加载成文档树的形式储存在内存中然后我们通过android的API来解析整个文档树 ,废话不多说就开始吧!

首先person.xml

内容:

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

<persons>

<personid="23">

<name>liming</name>

<age>30</age>

</person>

<personid="20">

<name>lixiangmei</name>

<age>25</age>

</person>

</persons>

下面就来看看具体的解析代码:

public class DOMParsseService {

private List<Person> personLs=null;

publicList<Person>readXMLDOM(InputStreaminputStream)

{

DocumentBuilderFactorydocumentBuilderFactory=DocumentBuilderFactory.newInstance();

try{

DocumentBuilderbuilder=documentBuilderFactory.newDocumentBuilder();

//开始加载整个文档到内存中形成文档树

Documentdocument=builder.parse(inputStream);

//得到根元素

Elementroot=document.getDocumentElement();

//得到根元素的子元素集合

NodeListnodeList=root.getElementsByTagName("person");

personLs=newArrayList<Person>();

for(inti=0;i<nodeList.getLength();i++)

{

Personperson=newPerson();

ElementchildElement=(Element)nodeList.item(i);

person.setId(newInteger(childElement.getAttribute("id")));

NodeListchildNodeList=childElement.getChildNodes();

for(intj=0;j<childNodeList.getLength();j++)

{//判断是否为元素类型

Nodenode=childNodeList.item(j);

if(node.getNodeType()==Node.ELEMENT_NODE)

{

ElementchildNode=(Element)node;

//判断是否name元素

if("name".equals(childNode.getNodeName()))

{

//获取name元素下Text节点,然后从Text节点获取数据

person.setName(childNode.getFirstChild().getNodeValue());

}elseif("age".equals(childNode.getNodeName()))

{

person.setAge(newInteger(childNode.getFirstChild().getNodeValue()).intValue());

}

}

}

personLs.add(person);

}

inputStream.close();

}catch(Exceptione){

e.printStackTrace();

}

returnpersonLs;

}

}

单元测试方法

public void testreadXMLDOM() throws Throwable{

DOMParsseServiceservice=newDOMParsseService();

InputStreaminStream=getClass().getClassLoader().getResourceAsStream("person.xml");

List<Person>persons=service.readXMLDOM(inStream);

for(Personperson:persons){

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

}

}

相关推荐