zoukankan      html  css  js  c++  java
  • 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。


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

  • 相关阅读:
    g_pLog
    win-socket
    时间转字符串 各种格式
    linux自启动脚本.sh
    openssl之aes对称加密
    openssl生成密钥/证书
    win10下安装openssl
    GUI的最终选择 Tkinter(二):Label和Button组件
    GUI的最终选择 Tkinter(一):Tkinter最初体验
    练习十三:水仙花数,用for循环实现
  • 原文地址:https://www.cnblogs.com/ZT-SummerRain/p/6724265.html
Copyright © 2011-2022 走看看