使用 Schema 的 sax 方式操作 xml(二)| 学习笔记

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 快速学习使用 Schema 的 sax 方式操作 xml。

开发者学堂课程【XML入门 :使用 Schema 的 sax 方式操作 xml(二)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/37/detail/860


使用 Schema 的 sax 方式操作 xml(二)

二、打印出整个文档

1、现在有一个需求是打印出整个文档,比如把 p1.xml 里面的内容都打印出来,这里面加了标签,标出什么样,打印出就什么样。

<person>

<p1>

<name> zhangs an</name>

<age>20</age>

</p1>

<p1>

<name>lisi</name>

<age> 30</age>

</p1>

</person>

2、首先看 console 里面 qname 只加名称,加标签就拼接,println 就不需要 ln了,因为会把标签里面的空格换行都当成内容解析,ln 表示自动换行,删掉,变成System. out . print("<"+qName+">");

文本也不需要了,

System. out . print(new String(ch, start, length)) ;

结束标签

System. out . print("</" +qName+"> ." ) ;

这样就可以得到整个文档,然后运行一下,是否可以得到。

运行结果如下:

<person>

<p1>

<name> zhangsan< /name>

<age> 20</age>

</p1>

<p1>

<name> lisi< /name>

<age>30</age>

</p1>

< / person>

得到整个文档。

只要把 new MyDefault1 传进来,它里面的方法就会自动去执行。

***执行 parse 方法,第一个参数 xml 路径,第二个参数是事件处器

***创建一个类,继承事件处理器的类,

***重写里面的三个方法

 

三、获取到所有的 name 元素的值

1、需求获取到所有的 name 元素的值。

//实现获取所有的 name 元素的值

class MyDefault2 extends DefaultHandler {

重写它里面的三个方法,右键 source-Override/Implement Methods

选择 characters(char, int, int),endElement(String, String, String),startElement(String, String, String, Attributes)

image.png

调整顺序,打印出里面所有 name 的元素,当解析到 name,会把 name 元素返回来,qname 是 name 元素。

/ /判断 qName 是否是 name 元素

if(" name" . equals(qName) {

表示出里面是 name 元素,注意开始叫 name,结束也叫 name,这里面就不能打印出它的值,首先可以定义一个变量 boolean 类型

boolean flag = false;

比如当解析到 name 元素

Flag=true;

当值是 true 时,让 characters 把内容打印出来

/ /当 flag 值是 true 时候,表示解析到 name 元素

if(flag==true ){

System. out. println(new String(ch, start,length)) ;

}

这样就可以打印出来。

/ /把 flag 设置成 false ,表示 name 元素结束

if("name" .equals(qName)) {

flag = false;

这样就可以把 name 里面的值都打印出来,过程是首先定义一个成员变量叫 flag,它的值是 false,当里面是 name 元素时,qname 就是 name,把 flag 改成 true,当 flag 等于 true 时,这就代表解析到 name 元素,把里面内容打印出来,最后表示结束的 name,再把 flag 设置成 false,就表示解析的部分结束,就是这样一个过程。

把 MyDefault1 改成 MyDefault2,再执行以下,看是否能把 name 的值都打印出来,结果如下,zhangsan,lisi 都打印出来了。

image.png

 

四、获取第一个 name 元素的值

1、加一个索引或者下标

Int indx =1;

2、当执行到以下方法时,表示第一次 name 就完成了,当 idx 等于1时取到的就是第一个 name 元素。

@Override

public void endElement(String uri, String localName, String qName )

Throws SAXException{

//把 flag 设置成 false,表示 name 元素结束

if("name" . equals(qName)) {

flag = false;

Idx++;

}

}

3、如何表示索引是1

//当 flag 值是 true 时候,表示解析到 name 元素

//索引是1

if(f1ag==true&&idx==1){

System. out . println(new String( ch, start, length));

}

这样得到的就是第一个 name 元素的值。执行看效果,得到 zhangsan。

image.png

这就表示得到具体某一个元素的值,它就是这么一个写法。

 

五、总结

使用 jaxp 的 sax 方式解析 xml

* sax 方式不能实现增删改操作,只能做查询操作

**打印出整个文档

***执行 parse 方法,第一个参数 xml 路径,第二个参数是事件处理器

***创建一个类,继承事件处理器的类,

***重写里面的三个方法

*获取到所有的 name 元素的值

**定义一个成员变量 flag= false

**判断开始方法是否是 name 元素,如果是 name 元素,把 flag 值设置成 true

**如果 flag 值是 true,在 characters 方法里面打印内容

**当执行到结束方法时候,把 flag 值设置成 false

*获取第一个 name 元素的值

定义一个成员变量 idx=1

**在结束方法时候,idx+1 idx++

**想要打印出第一个 name 元素的值,

-在 characters 方法里面判断,

--判断 flag=true 并且 idx==1 ,在打印内容

相关文章
|
8月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
|
8月前
|
XML Java 开发工具
jdom操作xml实战
jdom操作xml实战
|
5月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
239 1
|
7月前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
56 1
|
3月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
550 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
5月前
|
XML 数据格式
DTD和XML Schema之间的区别?
【8月更文挑战第22天】
89 0
|
8月前
|
XML 数据格式
XML Schema 复杂元素类型详解:定义及示例解析
在XML Schema(XSD)中,复杂元素包含其他元素和/或属性,分为4类:空元素、仅含元素、仅含文本和既含元素也含文本。定义复杂元素可通过直接声明或引用预定义的复杂类型。复杂空元素仅含属性,而仅含元素的类型则只包含其他子元素。XSD提供了`&lt;xs:sequence&gt;`、`&lt;xs:all&gt;`、`&lt;xs:choice&gt;`等指示器来规定元素顺序和出现次数,以及`&lt;xs:attributeGroup&gt;`和`&lt;xs:group&gt;`来组织元素和属性。
249 7
|
8月前
|
XML JavaScript Java
Java一分钟之-XML解析:DOM, SAX, StAX
Java中的XML解析包括DOM、SAX和StAX三种方法。DOM将XML加载成内存中的树形结构,适合小文件和需要随意访问的情况,但消耗资源大。SAX是事件驱动的,逐行读取,内存效率高,适用于大型文件,但编程复杂。StAX同样是事件驱动,但允许程序员控制解析流程,低内存占用且更灵活。每种方法都有其特定的易错点和避免策略,选择哪种取决于实际需求。
169 0
|
8月前
|
XML 数据格式
XML Schema 字符串数据类型及约束详解
XML中的字符串数据类型表示字符序列,包括换行、回车和制表符。处理器不修改值。`normalizedString`去除这些特殊字符,`token`则进一步移除前导和尾随空格及多余空格。字符串类型可使用枚举、长度等限制。`date`和`dateTime`数据类型表示日期和时间,`duration`表示时间间隔。数值类型如`decimal`和`integer`用于数值,布尔型表示真或假。还有如`base64Binary`和`anyURI`等其他数据类型。元素和数据类型可以有各种约束,如最大值、最小值和模式匹配。
105 0
|
8月前
|
XML JavaScript 数据格式
XML Schema(XSD)详解:定义 XML 文档结构合法性的完整指南
XML Schema(XSD)是用于定义XML文档结构的规范,它描述了元素、属性及其顺序、数据类型和约束。与DTD相比,XML Schema支持更多数据类型,如字符串、日期等,并且是基于XML的,允许扩展和重用。学习XML Schema有助于确保数据通信时双方对内容的理解一致,通过验证防止错误。示例展示了如何定义一个`note`元素,包含`to`, `from`, `heading`和`body`子元素,都是字符串类型。XML文档可以通过引用XML Schema进行验证,确保内容符合预设模式。
628 0