zoukankan      html  css  js  c++  java
  • XLM解析技术概述

    软件152   王磊

    XML解析技术概述


    1.XML 技术主要企业应用
    1)存储和传输数据 
    2)作为框架的配置文件
    2.使用xml 存储和传输数据涉及到以下两点
    1)通过程序生成xml
    2)读取xml 中数据 ---- xml 解析
    3.XML解析技术有三种:DOM、SAX、STAX
    4.什么是DOM和SAX ?
    1)DOM  Document Object Model ----- 文档对象模型 
    DOM思想:将整个xml 加载内存中,形成文档对象,所有对xml操作都对内存中文档对象进行
    DOM 是官方xml解析标准
    * DOM是所有所有开发语言都支持的
    2)SAX  Simple API for XML ----- XML 简单 API 
    为什么发明sax解析方式?  当xml 文档非常大,不可能将xml所有数据加载到内存 
    SAX 思想:一边解析 ,一边处理,一边释放内存资源 ---- 不允许在内存中保留大规模xml 数据
    3)StAX The Stream API for XML ----- XML 流 API
    JDK6的新特性STAX是JDK6.0中除了DOM和SAX之外的又一种拉模式处理XML文档的API,其思想和SAX相似 
    STAX 是一种 拉模式 xml 解析方式,SAX 是一种 推模式 XML 解析方式
    推push模式:由服务器为主导,向客户端主动发送数据
    拉pull模式: 由客户端为主导,主动向服务器申请数据
    5.XML解析开发包
    Jaxp(sun)、xml pull 、dom4j
    JAXP 是sun官方推出实现技术 同时支持 DOM SAX STAX
    DOM4j 是开源社区开源框架  支持 DOM 解析方式
    XML PULL是Android 移动设备内置xml 解析技术 支持 STAX 解析方式
    6.解析方式与解析开发包关系?
    解析方式是解析xml 思想,没有具体代码,解析开发包是解析xml思想具体代码实现
    7.DOM和SAX/STAX的区别
    DOM  
    支持回写
    会将整个XML载入内存,以树形结构方式存储
    XML比较复杂的时候,或者当你需要随机处理文档中数据的时候不建议使用
    SAX / STAX
    相比DOM是一种更为轻量级的方案
    采用串行方法读取 --- 文件输入流(字节、字符)读取
    编程较为复杂
    无法在读取过程中修改XML数据

    注意:当SAX和STAX 读取xml数据时,如果读取到内存数据不释放 ----- 内存中将存在整个xml文档数据 (类似DOM 支持修改和回写)

    8.DOM、SAX、STAX 在实际开发中选择?
    在javaee日常开发中 ---- 优先使用DOM (编程简单)
    当xml 文档数据非常多,不可能使用DOM ---造成内存溢出  ------ 优先使用STAX 
    移动开发 使用 STAX ---- Android XML PULL

    DOM解析

    DOM解析结构图

    1.DOM 解析快速入门
    1)创建 xml 文档 books.xml 
    在企业实际开发中,为了简化xml 生成和解析 ---- xml 数据文件通常不使用约束的
    2)使用DOM解析xml 
    将整个xml文档加载到内存中 : 工厂 --- 解析器 --- 解析加载
    3)Document通过getElementsByTagName获得节点集合NodeList 
    通过NodeList提供getLength和item遍历节点集合

    遍历ArrayList

    for (int i=0;i<arraylist.size();i++){
       arraylist.get(i);
    }

    遍历NodeList

    for (int i=0;i<nodelist.getLength();i++){
      nodelist.item(i);  ----- 将遍历每个节点转换子接口类型
    }


    什么是 Node? 对于xml 来说,xml所有数据都是node节点 (元素节点、属性节点、文本节点、注释节点、CDATA节点、文档节点)
    Element Attr Text Comment CDATASection Document  ----- 都是 Node 子接口

    node有三个通用API : 
    getNodeName():返回节点的名称
    getNodeType():返回节点的类型
    getNodeValue():返回节点的值  ---- 所有元素节点value都是 null

    2.DOM 编程思路小结
    1)装载XML文档 ---- Document
    2)Document 获得指定元素 ----- getElementsByTagName (返回 NodeList)
    3)遍历NodeList 获得 每个 Node
    4)将每个Node 强制转换 Element 
    5)通过元素节点API 操作属性和文本内容 
    getAttribute  获得属性值
    getTextContent 获得元素内部文本内容

  • 相关阅读:
    清理CentOS 7系统 journal日志
    漏洞修复:CVE-2018-18311 Perl_my_setenv()中的整数溢出导致缓冲区溢出
    content-script 发送消息给background : runtime.lastError: The message port closed before a response was received.
    SEO:适应百度的页面配置
    我的 .npmrc 配置
    Cordova + Vue 环境搭建
    发布一个PHP包到Packagist, 然后使用Composer安装
    vue3 问题记录
    问题记录
    小程序
  • 原文地址:https://www.cnblogs.com/nh123/p/7093466.html
Copyright © 2011-2022 走看看