XML解析笔记

前端之家收集整理的这篇文章主要介绍了XML解析笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
JAXP(Java API for XML Processing)是一种稳定、可靠的XML处理API,支持SAX(Simple API for XML)和DOM(Document Object Model)两种XML处理方法

SAX提供了一种流式的、事件驱动的XML处理方式,但编写处理逻辑比较复杂,比较适合处理大的XML文件

DOM和SAX不同,其工作方式是:首先将XML文档一次性装入内存;然后根据文档中定义的元素和属性在内存中创建一个“树形结构”,也就是一个文档对象模型,将文档对象化,文档中每个节点对应着模型中一个对象;然后使用对象提供的编程接口,访问XML文档进而操作XML文档。

DOM加载原理

引入的包
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Comment;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;



一般的JAXP处理都是从工厂开始,通过调用DocumentBuilderFactory的newInstance()方法,获得用于创建DOM解析器的工厂。
 DocumentBuilderFactory docBuilderFactory 
        = DocumentBuilderFactory.newInstance();


这里并没有创建出DOM解析器,只是获得一个用于创建DOM解析器的工厂,接下来需要对上述newInstance()方法得到的docBuilderFactory对象进行一些设置,才能进一步通过DocumentBuilderFactory,得到DOM解析器对象builder。
针对DocumentBuilderFactory对象进行的主要设置包括

忽略XML文档中的注释;
 //ignore all comments inside the xml file
      docBuilderFactory.setIgnoringComments(true);


支持XML空间;
 //allow includes in the xml file
      docBuilderFactory.setNamespaceAware(true);


支持XML的包含机制(XInclude)。
 docBuilderFactory.setXIncludeAware(true);


XInclude机制允许将XML文档分解为多个可管理的块,然后将一个或多个较小的文档组装成一个大型文档。也就是说,配置文件中,可以利用XInclude机制将其他配置文件包含进来一并处理,下面是一个例子:
<configuration xmlns:xi="http://www.w3.org/2001/XInclude">
……
<xi:include href="conf4performance.xml"/>
</configuration>
通过XInclude机制,把配置文件conf4performance.xml嵌入到当前配置文件,这种方法更有利于对配置文件进行模块化管理,同时就不需要再使用加载配置文件方法加载资源conf4performance.xml了。
设置完DocumentBuilderFactory对象以后,通过docBuilderFactory.newDocumentBuilder()获得了DocumentBuilder对象,
 DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();


用于从各种输入源解析XML。调用DocumentBuilder.parse()函数,返回一个DOM解析结果。
doc = builder.parse(input);
NodeList props = root.getChildNodes();

猜你在找的XML相关文章