DOM解析

1、xml主要的解析方式:DOM、SAX和StAX

  DOM思想:将整个xml加载到内存中,形成文档对象,所有对xml的操作就是对内存中的文档对象进行操作。另外,DOM是官方通用的xml解析标准;

  SAX:来自xml程序员的社区。;

2、程序员为啥要发明SAX?

  当xml文件比较大时,不可能将所有的xml文档全部加载到内存。

3、SAX(Simple API for xml)思想:一边解析,一边处理,一边释放资源,-----不允许在内存中存放大规模的xml数据

  StAX the stream API for XML-----------xml流API

  STAX是一种拉模式 xml解析方式,SAX是一种推模式 xml解析方式

推(push)模式:由服务器主导,向客户端主动发送数据

拉(pull)模式:由客户端主导,向服务器主动申请数据

4、程序员在实际开发过程中,使用已经开发好的工具包----JAXP、DOM4J、XML PULL


5、解析方式与解析开发包的关系:

  解析方式是解析xml解析的思想,没有具体代码,解析开发包是解析xml思想具体代码实现。

6、JAXP:是sun官方推出的实现技术, 同时支持DOM SAX STAX 
  要看详细的解析过程源码,可以参考Java/workspace_myeclipse/day02或者day03

7、DOM4J:是开源社区的开源框架,支持DOM解析

XML PULL:android移动设备内置xml解析技术,支持STAX解析方式。

8、DOM和SAX、STAX的有优缺点:DOM在解析xml数据的时侯,正因为是将整个文档数据加载到内存中的,因此是支持回写的,而SAX和STAX虽然性能高,

  但是不支持回写功能,因为它是一边解析,一边处理,一边释放资源。

9、当然,当SAX和STAX在读取数据时,如果读取到内存的数据不释放,-------内存中将存在整个xml文档数据(类似DOM,也就支持回写了)


10、在javaee日常开发中-----有先使用DOM,(编程简单)

当然当xml文档数据非常多时,不可能使用DOM------造成内存溢出------优先使用STAX或者SAX

特别是在移动开发过程中,会使用STAX,-------android xml pull

11、用JAXP进行xml解析:javax.xml.parsers(这是个包):存储了DOM和SAX的解析器

  JAXP是个具体的代码包,它里面实现了DOM和SAX的解析xml思想,从JDK6.0开始,也支持STAX这种思想。

  org.w3c.dom:存放xml 解析时的解析类。

  org.xml.sax:存放SAX解析相关工具类。

  xml文档中的所有元素、属性、文本都会被解析成node节点。

  注意:属性节点不属于任何节点的父节点或者子节点。


12、DOM解析的快速入门:

  1)、创建xml数据文件

    在企业的实际开发中,为了简化xml的生成和解析------xml数据文件一般不使用约束。

  2)、使用DOM解析xml

    将整个xml加载到内存中:工厂-----解析器----解析加载

分三步:

1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
3 DocumentBuilder builder = factory.newDocumentBuilder();
5 Document document = builder.parse("xml文档的名称");

接下来就是你获得xml中的具体标签,或者说是元素了。

例如:

1 NodeList nodelist = document.getElementsByTagName("标签名称"); 
2    for(int i=0;i<nodelist.getLenth();i++){
3       Node node = nodelist.item(i);
4         Element element = (Element)node;
5       element.getNodeType();
6         element.getNodeValue();
7         element.getTextContent();  
8   }

注意:getElementById()方法,必须用于带有约束的xml文档中。不带约束的xml文档是不能使用getElementById的。

所有语言默认都是支持DTD技术,当使用schema时,需要单独导入schema。


-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/ZT-SummerRain/p/6724265.html