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、查询 输入条件

 

原文地址:https://www.cnblogs.com/qq809306794/p/3183213.html