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)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件 ...
随机推荐
- sass(混合mixin的调用、@content)
sass中使用@mixin声明混合,可以传递参数,参数名以$符号开始,多个参数以逗号分开,也可以给参数设置默认值.声明的@mixin通过@include来调用 1.无参数mixin scss.styl ...
- 001Angular2环境准备
01.安装Node.js 和 npm 安装完成后,在命令行依次使用node -v 和 npm -v可以看到版本号. 02.安装cnpm npm需要连接谷歌服务器,国内不能正常使用,需安装cnpm.命令 ...
- 触摸事件MotionEvent
触摸事件MotionEvent在用户交互中,占着非常重要的地位.首先,来看看MotionEvent中封装的一些常用的事件常量,它定义了触摸事件的不同类型. 1.单点触摸按下动作 public stat ...
- wx.grid.Grid
# -*- coding: cp936 -*- import wx import wx.grid import wx.lib.gridmovers as gridmovers import pymss ...
- matlab练习程序(差异演化DE)
这两天在看M.Tim Jones的<人工智能>,书中不只介绍原理,而且都有相应的c代码实现. 虽然代码不完全,不过缺少的部分完全可以自己补完. 差异演化和昨天实现的PSO很类似,都属于优化 ...
- Mysql 服务无法启动解决办法
1.我使用的是MySQL-5.7.10-winx64 版本,在安装后启动服务时出现 “服务无法启动”错误 2.解决办法为删除安装目录中的data文件,然后打开cmd调到自己的安装目录下输入mysqld ...
- scope 作用域(bean 的生存范围)
默认是 singleton ,单例模式,如下代码: @Test public void testAddUser() throws Exception { ApplicationContext ctx ...
- Js 对象数组,转化为字符串
var str = [{"cuid":"23910","content":"是","type":&q ...
- SpringBoot应用和PostgreSQL数据库部署到Kubernetes上的一个例子
创建一个名为ads-app-service的服务: 上述Service的yaml文件里每个字段,在Kubernetes的API文档里有详细说明. https://kubernetes.io/docs/ ...
- HDU 4757 Tree(可持续化字典树,lca)
题意:询问树上结点x到结点y路上上的权值异或z的最大值. 任意结点权值 ≤ 2^16,可以想到用字典树. 但是因为是询问某条路径上的字典树,将字典树可持续化,字典树上的结点保存在这条路径上的二进制数. ...