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