一個單獨的XML檔案不能做任何的工作,它需要與應用程式結合起來實現各種功能,應用程式通過XML解析器和XML應用程式介面處理XML檔案。我們現在就討論一下如何使用Java載入XML檔案並訪問其中的元素。
為了簡化編寫處理XML的應用程式,W3C已制訂出多種編程介面,其中包含的DOM和SAX(Simple API for XML)較為典型。在Java應用程式中要需要使用JAXP(Java API for XML)建立DOM或是SAX解析器來訪問XML檔案。
JAXP使得用Java開發處理XML資料的應用程式非常容易,JAXP包括文法分析器、標準SAX與DOM,可麼選擇以事件流或是建立對象表示來解析資料。JAXP1.1版本還支援XSLT標準,可以控制資料表表示,並可以將資料轉換成其他的XML檔案或格式,如HTML。
JAXP提供的類和方法,可以讓Java應用程式使用DOM解析或轉換XML檔案。在JDK 1.4支援的JAXP API 1.1版支援XML。
包 |
說明 |
Javax.xml.parsers |
提供處理XML檔案的類 |
Javax.xml.transform |
提供處理XSLT檔案的類 |
org.xml.sax |
這是SAX解析器,提供以事件驅動方式解析XML檔案的API |
org.xml.saxheplers |
提供解析錯誤處理的相關類,可以協助程式設計者使用SAX API |
org.w3c.dom |
提供支援DOM建議規格的包 |
在Java中想要載入XML檔案,首先要引入與XML相關的類包
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.w3c.dom.*;
import java.io.*;
在JAXP中DOM解析器稱為DocumentBuilder,可以通過工廠類DocumentBuilderFactory獲得,而document對象則可以通過類DocumentBuild獲得,使用try catch指令建立解析錯誤處理。在建立 DocumentBuild對象後,可以使用其Parser方法解析載入XML檔案,file對象載入後就可以處理XML檔案的結點內容,程式塊的架構如下
DocumentBuilderFactor dbf = DocumentBuilderFactory.newInstance();
try ...{
DocumentBuilder db = dbf.newDocumentBuilder();
document = db.parser(new File(args[0]));
.....
}
catch(SAXException se) ...{
//解析過程錯誤
Exception e = se;
if (se.getException() != null) ...{
e = se.getException();
e.printStackTrack();
}
}
catch(ParserConfigurationException pe) ...{
//解析器設定錯誤
pe.printStackTrace();
}
catch(IOException ie) ...{
//檔案處理錯誤
ie.printStackTrace();
}
獲得document執行個體後,就可以對DOM的文檔樹進行訪問了,如果要遍曆DOM文檔,首先要獲得根結點,然後獲得根結點的子結點列表。
//擷取根結點
Element element = document.getDocumentElement();
//擷取根結點的子結點列表
NodeList = element.getChildNodes();