Java解析XML有多种方式,因此需要分为几个不同的系列来讲。具体安排如下:
1. DOM最基本解析XML;
2. SAX基于事件解析XML; http://gaofulai1988.iteye.com/blog/2262677
3. JDOM不错的解析XML; http://gaofulai1988.iteye.com/blog/2262680
4. DOM4J好用的解析XML; http://gaofulai1988.iteye.com/blog/2262683
5. XPATH解析XML; http://gaofulai1988.iteye.com/admin/blogs/2262787
6. XML与Bean之间的转换。 http://gaofulai1988.iteye.com/admin/blogs/2262787
这一个是讲DOM解析XML,DOM的基本思想是将XML文档解析成一个树型,然后依据父子节点、弟兄节点来遍历这棵树。所以它的最大特点是在解析前,先将整个文档载入,这也是它最大的不足之处,如果这个XML文件很大,怎么办呢?
在使用DOM之前,有两种概念提前说一下,Node(节点)和Element(元素)之间的区别,有一个结论是:
Element一定是Node,Node不一定是Element。如何来理解?
<name>test</name>
name既是一个节点也是一个元素,而test只是一个节点,而不是一个元素。
好了,看一个例子吧。先准备好xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<Students>
<student>
<NO id="123">123456</NO>
<NAME>abc</NAME>
</student>
<student>
<NO id="234">456789</NO>
<NAME>def</NAME>
</student>
</Students>
DOM解析代码如下:
public static void main(String args[]) throws ParserConfigurationException,
SAXException, IOException {
// xml文件的路径
File f = new File("D:" + File.separator + "test.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析成一个Document对象
Document doc = builder.parse(f);
// 根据标签名获取所有的节点
NodeList nl = doc.getElementsByTagName("student");
for (int i = 0; i < nl.getLength(); i++) {
// 输出标签的值
System.out.print("No:"
+ doc.getElementsByTagName("NO").item(i).getFirstChild()
.getNodeValue());
System.out.print("\taddress:"
+ doc.getElementsByTagName("NAME").item(i).getFirstChild()
.getNodeValue());
// Element一定是Node, Node不一定是Element
Element e=(Element)doc.getElementsByTagName("NO").item(i);
// 输出属性值
System.out.println("\tid="+e.getAttribute("id"));
}
}