Dom解析XML文件

public List<Person> getPersons(InputStream inStream) throws Exception{
List<Person> persons = new ArrayList<Person>();
//得到DocumentBuilder对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
/*
* 使用DocumentBuilder对象方法对文件进行解析
* 传入的参数是XML文件的内容
* 调用完该方法已经完成对XML文件的解析。
*/
Document document = builder.parse(inStream);
/*
* 下面的操作都是从内存中检索数据(文档树)
*/

//第一步:取得根元素
Element root = document.getDocumentElement();
//得到节点集合
NodeList personNodes = root.getElementsByTagName("person");
//迭代从节点列表中取得元素
for(int i = 0 ; i < personNodes.getLength() ; i++){
Person person = new Person();
//得到person节点对象
Element personElement = (Element)personNodes.item(i);
//取得节点属性值
person.setId(new Integer(personElement.getAttribute("id")));
//取得节点的子节点
NodeList personChilds = personElement.getChildNodes();
for(int j = 0 ; j < personChilds.getLength() ; j++){
//判断当前的节点的类型是否是元素类型
if(personChilds.item(j).getNodeType() == Node.ELEMENT_NODE){
//取得当前节点对象
Element childElement = (Element)personChilds.item(j);
if("name".equals(childElement.getNodeName())){
//取得第一个节点的文本值
person.setName(childElement.getFirstChild().getNodeValue());
}else if("age".equals(childElement.getNodeName())){
person.setAge(new Short(childElement.getFirstChild().getNodeValue()));
}
}

}
persons.add(person);
}
return persons;
}

 通过以上代码可以让你了解到如何使用Dom来解析XML文件,不推荐使用(太耗费内存)

以上用到的person.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>
总结:

1>首先调用DocumentBuilderFactory对象的newInstance()方法,得到DocumentBuilderFactory的对象。

2>其次调用DocumentBuilderFactory的对象的newDocumentBuilder()方法,得到DocumentBuilder对象,

    该对象用来对XML文件进行解析

3>调用DocumentBuilder对象的parse方法,传入XML文件资源,得到Document对象

------------------------------------------------------------------------------------------------------------------------------------

下面的内容都是在内存中进行操作:

4>调用Document对象的getDocumentElement()方法来取得根节点对象root。

5>调用根节点对象root中的getElementsByTagName("根节点名"),得到一个节点列表NodeList对象。

注意:除了子节点(没有子节点的节点)外,其它节点对象都有一个item(int i)方法来得到每个子节点的对象。

6>循环迭代子节点(NodeList对象),得到子节点对象(Element对象).,调用getChildNodes()方法得到子节点列表。

7>再次循环迭代子节点对象,调用getNodeType()方法判断是否是元素类型,如果是取得该子节点下的节点对象,进行以上逻辑操作。


你可能感兴趣的:(exception,xml,Integer,文档,encoding)