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);
}