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());
}
}