1. 程式人生 > >用JDK自帶的包來解析XML檔案(DOM+xpath)

用JDK自帶的包來解析XML檔案(DOM+xpath)

DOM程式設計不要其它的依賴包,因為JDK裡自帶的JDK裡含有的上面提到的org.w3c.dom、org.xml.sax 和javax.xml.parsers包就可以滿意條件了。
(1)org.w3c.dom W3C推薦的用於XML標準規劃文件物件模型的介面。
(2)org.xml.sax 用於對XML進行語法分析的事件驅動的XML簡單API(SAX)
(3)javax.xml.parsers解析器工廠工具,程式設計師獲得並配置特殊的特殊語法分析器。


先來寫一個xml檔案(DTD檔案請參閱XML DTD那篇博文):
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE book SYSTEM "D:\workspace\XML\WebRoot\WEB-INF\book.dtd">
<book>
 <bookname name="XML詳解" font="GB2312"></bookname>
 <authors>
 <author name="張孝祥" sex="男" age="45"></author>
 <author name="王勇" sex="男" age="35"></author>
 <author name="王波" sex="男" age="30"></author>

 </authors>
 <price value="¥55"></price>
 <publishdate>
 <value>2009-08-18</value>
 </publishdate>
</book>

再來寫解析xml檔案的java檔案:
package com.xml.jdk;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

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

public class XPathForXml {
 public void parseXMLWithJdk(){ 
 try {
//讀取book.xml到記憶體
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder dbd = dbf.newDocumentBuilder();
                Document doc = dbd.parse(new FileInputStream("D:\\workspace\\XML\\WebRoot\\WEB-INF\\book.xml"));

//通過XML獲得book的authors的author子節點列表
XPathFactory f = XPathFactory.newInstance();
                XPath path = f.newXPath();
                NodeList authors= (NodeList) path.uate("book/authors/author", doc,XPathConstants.NODESET);
 System.out.println(authors.getLength());
 //遍歷取到的元素
 if(authors!=null){
 for(int i=0;i<authors.getLength();i++){
Node author   = authors.item(i);
int n = i + 1;
System.out.print(n+".  名字:"+author.getNodeName());