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

简介: 快速学习使用 Schema 的 sax 方式操作 xml。

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

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


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

 

内容介绍

一、sax 方式只做查询操作

二、打印出整个文档

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

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

五、总结

 

一、sax 方式只做查询操作

1、使用 jaxp 的 sax 方式解析 xml

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

2、打开文档,先创建一个 other 文件,命名为 p1.xml

在里面写几个标签

<person>

<p1>

<name> zhangsan</name>

<age>20</age>

</p1>

<p1>

<name>lisi</name>

<age> 30</age>

</p1>

</person>

3、创建类之前要创建包,命名为 cn.itcast.jaxpsax。

3、在里面写一个类,新建一个 class,命名为 testsax。

main 方法生成有一个快捷键,直接写一个 main,加 alt 加斜线,就会直接出来,先写基本的步骤,首先第一步要的到 saxparser 解析器,但是这个解析器通过工厂才能得到,所以第一个步要创建解析器工厂,第二部创建解析器,执行 parse 方法,接下来写下这三部操作。

package cn. itcast.jaxpsax;

import javax. xml . parsers. SAXParserFactory;

public class TestSax {

public static void main(String[] args)throws Exception {

/*

* 1、创建解析器工厂

* 2、创建解析器

* 3、#执行 parse 方法

* */

/ /创建解析器工厂

SAXParserFactory saxParserFactory = SAXParserFactory. newInstance();

//创建解析器

SAXParser saxParser = saxParserFactory . newSAXParser();

有异常给抛出去

//执行 parse 方法

saxParser.parse("src/p1. xml ,dh);

}

}

4、saxParser.parse("src/p1. xml ,dh);里面传两个参数,第一个是路径,第二个传事件处理器,看一下 defaulthandler 的类,这里面需要自己写一个事件处理器,来继承这个类,继承类自后就重新以下三个方法,

*当解析到开始标签时候,执行 startE1 ement 方法,参数 qlame:返回标签名称

*当解析到文本内容时候,执行 characters 方法,通过 string 的构造方法返回内容

*当解析到结束标签时候,执行 endE1 enent 方法,参数 qNane,返回标签名称

需要自己创一个类。

*4、自己创建一个类,继承 defaulthandler

*5、重写类里面的三个方法

5、写一个类,类的位置不能写在//执行 parse 方法的下面,还要往下写。一个里面可以有多个 class 类,但是只能有一个 public,继承这个类。

class MyDefault1 extends DefaultHandler

重写 DefaultHandler 这个方法,这有个快捷键的方法,点击右键,在 source 里面有一个叫 Override/Implement Methods....,点击

image.png

可以看到 DefaultHandler 里面所有方法,就找到用的这三个方法,

characters(char, int, int)

endElement(String, String, String)

startElement(String, String, String, Attributes)

把顺序调整一下

@Override

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

//TODO Auto- generated method stub

super. startElement(uri, localName, qName, attributes);

}

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

// TODO Auto- generated method stub

super. characters(ch, start, length);

}

@Override

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

Throws SAXException {

//TODO Auto- generated method stub

super . endElement(uri, localName, qName ) ;

}

6、dh 写成 new MyDefault1()) ;

7、当开始条件就用 startElement 这个方法,qname 就返回标签名称,比如写一下开始标签。

System. out. println("start:"+qName) ;

第二个方法里面是它的文本内容,里面传三个参数。

System. out . print1n("text: "+new String(ch, start, length)) ;

最后一个是结束标签。

System. out . println("end: " +qName) ;

完整代码如下:

@Override

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

System. out. println("start:"+qName) ;

}

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

System. out . print1n("text: "+new String(ch, start, length)) ;

}

@Override

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

Throws SAXException {

System. out . println("end: " +qName) ;

}

执行,看能否将 p 里面的内容打印出来,右键 run as 运行程序。下图是打印出的结果:

image.png

里面会有空格,就是解析的时候会把空格和换行都当作内容进行解析。

相关文章
|
Java
“解密Netty中的BossGroup与WorkerGroup:他们之间的默契和配合“
“解密Netty中的BossGroup与WorkerGroup:他们之间的默契和配合“
1447 0
使用JTS及其姐妹项目GeoTools进行坐标系转换
【6月更文挑战第7天】使用JTS及其姐妹项目GeoTools进行坐标系转换
1450 0
|
Java 计算机视觉
如何快速有效降低 JavaCV 依赖包体积?
如何快速有效降低 JavaCV 依赖包体积?
1501 3
|
存储 otter 关系型数据库
BLOB和VARBINARY类型的字段不能设置为NULL
BLOB和VARBINARY类型的字段不能设置为NULL
410 1
|
缓存 前端开发 算法
CocosCreator3.8研究笔记(十六)CocosCreator 2D对象
CocosCreator3.8研究笔记(十六)CocosCreator 2D对象
734 0
|
人工智能 机器人
AI 绘画获奖了,Midjourney 极简入门
AI 绘画获奖了,Midjourney 极简入门
AI 绘画获奖了,Midjourney 极简入门
|
消息中间件 Kubernetes NoSQL
【云原生】3.4 RuoYi-Cloud部署实战(上)
​ 像 Pods仓库叫 DockerHub,那么 Kubernetes 就有仓库叫——helm官网:Helm 中间有个Charts 点进去,之后可以看见一个输入框,输入 mysql 就有 mysql ,输入 redis,就有 redis。 ​
961 0
【云原生】3.4 RuoYi-Cloud部署实战(上)
|
XML JSON 缓存
阿里巴巴国际站获得商品详情 API 调用分享(销量、详情图片、宝贝链接)
阿里巴巴国际站获得商品详情 API 调用分享(销量、详情图片、宝贝链接)