• xml/dom/sax


    xml 解析 DOM 和 SAX

    xml 解析技术 一直 更新

    DOM 思想:xml 对象

    问题:文档越来越大 ---> 性能

     

    SAX 思想:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析器都支持它。

    只去寻找需要的数据,不去分析不需要的

     

     

    JAXP(Java API for XML Processing ) 官方的--- sun JDK支持

    JAXP支持DOM SAX

     

     

    Jdomdom4j 民间 ---> 使用DOM思想来处理XML

    企业程序员 JDOM 写到一半的时候 其中一部分人 DOM4J

     

    DOM 思想(Document Object Model,即文档对象模型)W3C组织推荐的解析XML的一种方式。

    元素与元素之间 父子关系

    <books>

    <book>

    <id>b01</id>

    <name>think in java</name>

    </book> 

    <book>

    <name>core java</name>

    </book>

    <book>

    <name>java 入门</name>

    </book>

    </books>

    SAX 解析 逐行读取分析

    需要core java

    先读取 think in java 不需要

    读取到 core java

     

    xml语法 : 元素 属性 注释

    node 节点 包括:元素 属性 文本  

    book为例

    books 位于 book之上

    book位于 name之上

    节点只能有一个父节点(parent)

    节点可以有多个子节点(children) 

     

    学习DOM解析 ----> 第一步:获得整个文档对象 Document

     

    getDocumentElement() 

              这是一种便捷属性,该属性允许直接访问文档的文档元素的子节点。

     

    Element getElementById(String elementId) 

              返回具有带给定值的 ID 属性的 Element。 

    NodeList getElementsByTagName(String tagname) 

              按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。 

     

     

    Node 子节点 :AttrElement

     

    NodeList 节点列表 : 多个节点

     

    [#document: null]

    [books: null]

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

    [book: null]

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

    [book: null]

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

    [book: null]

     

    getTextContent

     

    当你使用sysout输出一个复杂元素  [元素名: null] 

    当你使用getTextContent 输出复杂元素内容时:所有子元素的内容 不包含标签 // 不使用

    当你使用getTextContent 输出简单元素内容时:直接得到里面文本内容

     

    DOM 查找元素 :

    1、全局查找 getELementsByTagName

    2、相对位置关系查找 父节点 子节点 兄弟节点

     

    Attr节点  ---- > document.getElementById()

     

    getNodeName():返回节点的名称(元素-- > 标签名 属性---> 属性名称 文本--->#text

    getNodeType():返回节点的类型 (Node源码 元素 2属性 3文本)

    getNodeValue():返回节点的值 ---> 1、元素null 2.属性 属性值 3.文本 文本内容

    getTextContent()  1.元素 返回所有后代节点文本内容 2.属性 属性值 3. 文本 文本内容

     

    XML 空格和回车 保留

    <xxx></xxx> 子节点为0

    <xxx> 

    </xxx> 子节点 1个 类型:文本

    <xxx>

    <yyy></yyy>

    </xxx> 子节点 3个 第一个回车:文本节点 <yyy>:元素节点 第二个回车:文本节点

    <xxx>

    yyy

    </xxx> 子节点 1个 回车yyy回车:文本节点

     

    <a>

    <a1><text></text></a1>

    <a2></a2>

    <a>

     

    删除节点 A

    A的父节点调用removeChild(A)

     

    思考:

    增加节点,增加了一个已经存在的节点?? ----> 节点移动

     

    练习:实现节点互换?

     

    SAX Parser 加载XML 

    XML解析绑定到 ----- DocumentHandler

     

    SAX

    元素开始 <book id="itcast101">  元素名称 属性列表

    startElement(String uri, String localName, String qName,

    Attributes attributes)

    qName 元素名称

    attributes 属性列表

     

    characters(char[] ch, int start, int length) ---- new String(ch,start,length)

    元素结束 </book> 元素名称

     

    SAX解析时 怎么样在找到需要的数据后 中止? throw new SAXException()

     

    SAX解析

    1、解析开始元素 解析属性

    2、解析结束元素 解析结束元素里面的文本内容

     

    Xpath 是 W3C xml 查找技术

    DOM4j 如何实现Xpath

     

    Xpath表达式

    /books/book 所有直接位于books子元素的book元素

    //book 匹配所有book元素 不管元素在哪个位置

    /books//book 匹配所有books 后代book元素

    //@id 匹配所有id属性对象

    //book[@id] 匹配所有包含id属性的book元素,无论位置在哪

    //book[@id='itcast101'] 匹配id属性为itcast101book元素

    //book[name='think in java'] 匹配所有namethink in javabook元素

    //student[age>20] 匹配所有age大于20student元素

    //* 匹配所有元素

    //*[@id] 匹配所有含有id属性的元素

     

    商品信息管理系统案例

    商品信息(商品编号,商品名称,描述,价格,数量)

    控制台 UI

    1、选择功能

    CURD

    2新建一个商品

    从控制台输入商品5个信息

    输入后,将信息写入一个xml文件

    3、查询 输入条件

     

  • 相关阅读:
    Spring Boot的每个模块包详解
    spring框架所有包说明
    TCP三次握手和四次挥手
    线程池实现原理
    AVL树与红黑树
    去哪儿网面经
    什么是缓存一致性问题?如何解决?
    Redis的应用场景和优缺点
    线程池
    手写快排
  • 原文地址:https://www.cnblogs.com/qq809306794/p/3183213.html
Copyright © 2020-2023  润新知