JDK中的org.w3c.dom包提供了處理XML的API。要想利用此包中的API來處理XML文件,首先需要理解如下的這些概念:
(1)Node:是整個文檔對象模型的主要數據類型,它表示該文檔樹中的單個節點,根據 DOM的定義,XML
文檔中的每個成分都是一個節點,比如:
<!-- comment -->
<service
id="cretae">create service</service>
這裏的service(元素節點)、id(屬性節點)、"create service"(文本節點)都是節點,甚至於註釋"comment"都是一個節點(註釋節點)。
JDK中的Node接口提供了一些常量,用於判斷節點的類型:
ATTRIBUTE_NODE :屬性節點
COMMENT_NODE :註釋節點
TEXT_NODE :文本節點
ELEMENT_NODE:元素節點
XML DOM 把 XML 文檔視爲一種樹結構,這種樹結構被稱爲節點樹。以下面的xml文件爲例:
<service id="cretae">
<class path="c:\\"></class>
<source path="d:\\"></source>
</service>
class節點和source節點是service節點的子節點,service節點是class節點和source節點的父節點,而calss節點和source節點之間是兄弟關係。(2)Element:Element接口表示 XML 文檔中的一個元素,而每個 XML 標籤都是是一個元素節點,比如:
<service id="cretae"></service>
這裏的service就是一個Element。在JDK中,Element接口繼承自Node接口。
(3)Document:Document接口表示整個XML 文檔,它是文檔樹的根,提供對文檔數據的基本訪問。
解析XML的第一步就是要將XML文件轉換爲Document對象,首先通過DocumentBuilderFactory獲取生成DOM對象樹的解析器。
final DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
try
{
final DocumentBuilder builder = factory.newDocumentBuilder();
logger.debug("create builder success.");
Document doc = builder.parse(new File(this.path));
logger.debug("parse xml file success");
}
catch (final ParserConfigurationException e)
{
logger.error("Constructor document builder error : " + e);
}
catch (final SAXException e)
{
logger.error("parse file error : " + e);
}
catch (final IOException e)
{
logger.error("parse file error : " + e);
}