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 获得元素内部文本内容

  • 相关阅读:
    自定义 Spring Boot 安全组件 Security 的用户名和密码的方法
    禁用 Spring Boot 中引入安全组件 spring-boot-starter-security 的方法
    CentOS 7 上配置 maven 的环境变量
    CentOS 7 上配置 JDK1.8 的环境变量
    CentOS 7 上安装 xz utils 解压缩工具
    常用 Maven 配置
    接口统计模板
    为什么领域模型对于架构师如此重要? https://blog.csdn.net/qq_40741855/article/details/84835212
    什么是实体关系图(ERD)? 转
    彻底明白Flink系统学习5:window、Linux本地安装Flink
  • 原文地址:https://www.cnblogs.com/nh123/p/7093466.html
Copyright © 2011-2022 走看看