您的位置:首页 > 其它

使用DOM解析XML文档

2015-05-11 12:26 393 查看
简单介绍一下使用DOM解析XML文档,解析XML文件案例:

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

-<pet>

-<dog id="1">

<姓名>小白</姓名>

<健康值>100</健康值>

<亲密度>0</亲密度>

<年龄>1岁</年龄>

</dog>

-<dog id="2">

<姓名>黄鼠狼</姓名>

<健康值>30</健康值>

<亲密度>90</亲密度>

<年龄>5岁</年龄>

</dog>

-<dog id="3">

<姓名>小东</姓名>

<健康值>90</健康值>

<亲密度>10</亲密度>

<年龄>3岁</年龄>

</dog>

</pet>


使用DOM解析XML文档

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
* 使用DOM解析XML文档
* @author Administrator
*
*/
public class DomReadXML {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

//========使用DOM解析XML
//第一步:建立DOM解析工厂对象实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

try {
//第二步:从DOM解析工厂中获取解析器
DocumentBuilder db = dbf.newDocumentBuilder();

//第三步:解析XML文件;载入XML文件得到Document即DOM树
Document dom = db.parse("file:///D:/Desktop/chapter14/教学演示案例/示例3:使用内部DTD文件/pet2.xml");

//得到所有狗狗节点信息
NodeList nl = dom.getElementsByTagName("dog");
System.out.println(nl.getLength());
//循环取出信息
for (int i = 0; i < nl.getLength(); i++) {

//得到每只狗狗节点
Node dog = nl.item(i);

//得到狗狗的属性(即ID)
Element el = (Element)dog;
String id = el.getAttribute("id");
System.out.println("ID:"+id);

//获取狗狗的子节点信息
for(Node dog_child = dog.getFirstChild();dog_child!=null;dog_child = dog_child.getNextSibling()){

//为了防止打印空格(即#text);需要判断当前对象为Node节点对象
if(dog_child.getNodeType() == Node.ELEMENT_NODE){
String name = dog_child.getNodeName();
String value = dog_child.getFirstChild().getNodeValue();
System.out.println(name+":"+value);
}
}

}

} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: