sax技术解析xml下jaxp解析器详细代码
*解析xml的两种技术dom和sax
dom:根据xml的层级结构在内存中分配一个树形结构,把xml标签,属性,文本封装成对象。
sax方式:事件驱动,边读边解析。
在javax.xml.parsers包里面:
SAXParser类,此类的实例可以从 SAXParserFactory.newSAXParser() 方法获得。
parse(File f, DefaultHandler dh):第一个参数(xml路径) 第二个参数(事件处理器)
SAXParserFactory类,使用 newInstance()方法进行实例化。
SAX解析执行过程图解:

**此技术不能用于增删改操作,只能用于查询操作。
animal.xml
<?xml version="1.0" encoding="UTF-8"?>
<animal>
<cat>
<name>汤姆</name>
<color>black</color>
<age>10</age>
</cat>
<cat>
<name>丑小鸭</name>
<color>yellow</color>
<age>15</age>
</cat>
</animal>
animal.java
package example4;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
//打印出整个文档
class animal{
public static void main(String[] args) throws Exception, SAXException {
/* 1.创建解析器工厂
* 2.创建解析器
* 3.执行parse方法
*4.自己创建一个类,继承 DefaultHandler类
*5.重写类里面的三个方法
*/
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
SAXParser saxParser=saxParserFactory.newSAXParser();
//取出所有标签,元素,内容。
//saxParser.parse("src/example4/animal.xml",new mydefault());
saxParser.parse("src/example4/animal.xml",new mydefault1());
}
}
class mydefault extends DefaultHandler{
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
System.out.print("<"+qName+">");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.print(new String(ch,start,length));
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.print("</"+qName+">");
}
}
运行结果:
<animal>
<cat>
<name>汤姆</name>
<color>black</color>
<age>10</age>
</cat>
<cat>
<name>丑小鸭</name>
<color>yellow</color>
<age>15</age>
</cat>
</animal>
//实现获取所有name元素的值
class mydefault1 extends DefaultHandler{
boolean flag=false;
int index=1;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if("color".equals(qName)) {
flag=true;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(flag==true && index==1) {
System.out.println(new String(ch,start,length));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if("color".equals(qName)) {
flag=false;
index++;
}
}
//蓝色部分表示获取第一个name元素的值时,需要添加的代码。当&&index==2时,表示获取第二个元素的值。
}
sax技术解析xml下jaxp解析器详细代码的更多相关文章
- dom技术解析xml下jaxp解析器详细代码
1.使用jaxp实现查询操作 person.xml <?xml version="1.0" encoding="UTF-8" standalone=&qu ...
- xml解析方式之JAXP解析入门
XML解析 1 引入 xml文件除了给开发者看,更多的情况使用[程序读取xml文件]的内容.这叫做xml解析 2 XML解析方式(原理不同) DOM解析 SAX解析 3 XML解析工具 DOM解析原理 ...
- java解析XML之DOM解析和SAX解析(包含CDATA的问题)
Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电 ...
- XML基础+Java解析XML +几种解析方式的性能比较
XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...
- ElementTree 解析xml(minidom解析xml大文件时,MemoryError)
在使用minido解析xml文件时,因为文件过大,结果报错MemoryError.查询后得知是因为minidom在解析时是将所有文件放到内存里的,很占用内存,所以要考虑换一种方法来处理xml文件. ...
- Sax解析xml及pull解析xml
sax解析参考:http://www.iteye.com/topic/763895: 说明:测试时报空指针异常,未能读取到数据,关注Sax解析的过程及API即可: pull解析参考:http://ww ...
- 使用XMLConfiguration解析xml,PropertiesConfiguration解析properties等相应信息
org.apache.commons.configuration.XMLConfiguration; Apache Common-Configuration工具可以从Properties文件,XML文 ...
- XML 解析之 jaxp 解析器
XML 的解析方式有两种方式: DOM 解析和 SAX 解析. DOM 解析: 根据 XML 的层级结构, 在内存中分配一个树形结构, 把 XML 的标签, 属性和文本都封装成对象. 优点: 可以实现 ...
- Android解析XML之SAX解析器
SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件 ...
随机推荐
- 介绍一款web端的截图工具
牛牛截图,web端的一款截图工具,下面是代码及实例. 依赖jquery-1.7.min.js /**************************************************** ...
- wxpython wx.windows的API
wx.Window is the base class for all windows and represents any visible object on screen. All control ...
- attention机制的实现
本文转自,http://www.jeyzhang.com/understand-attention-in-rnn.html,感谢分享! LSTM 中实现attention:https://distil ...
- Angular js ng-bind 和ng-module的区别
1.ng-bind 是从$scope ->view 的单向绑定 ,<span ng-bind="object.***"></span>只用于展示数据 ...
- redis复制集(sentinel)
https://www.jianshu.com/p/45ffd2a84143 内核配置 cat >> /etc/rc.local << EOF echo never > ...
- vscode 显示"没有活动的源代码控制提供程序“处理
不知为何我的 VS Code 在 1.25 版本开始就一直 ”没有活动的源代码控制提供程序“,找了好几天都没找到,今天终于找到怎么处理了, 切换到插件中找到下图对应的 Git (可以直接再上面搜索框输 ...
- htmlunit模拟登录
htmlunit jar项目路径http://sourceforge.net/projects/htmlunit/files/htmlunit/ demo代码如下 public class AutoL ...
- 在Hibernate单向一对多关联关系中的org.hibernate.StaleStateException 异常。
具体异常如下: Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count fro ...
- 开源重磅,java内容管理系统CMS,点击就可以编辑,保存,轻松构建自己的站点
买的暂时空间不给力.内存不足,老给关闭,先转到京东云上了,免费的,也不知免费多久. 这是地址2 http://java4cms.jd-app.com/index.html 这是地址 http:// ...
- 【洛谷5292】[HNOI2019] 校园旅行(思维DP)
点此看题面 大致题意: 给你一张无向图,每个点权值为\(0\)或\(1\),多组询问两点之间是否存在一条回文路径. 暴力\(DP\) 首先,看到\(n\)如此之小(\(n\le5000\)),便容易想 ...