JAVA解析XML之SAX方式

SAX解析xml步骤

  通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory
  通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser
  创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle

重写DefaultHandle类的方法

  startElement方法用来遍历xml文件的开始标签;

  endElement方法用来遍历xml文件的结束标签;

  startDocument方法用来标识解析开始;

  endDocument方法用来标识解析结束。

  characters方法用来获取text

  其中:参数qName 遍历到的元素的名称

     且同样会出现空白和换行的问题

下面直接上代码

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>JAVA编程思想</name>
<anthor>****</anthor>
<year>2000</year>
</book>
<book id="2">
<name>疯狂JAVA系列</name>
<anthor>李刚</anthor>
<price>89</price>
</book>
</bookstore>

books.xml

SAX.java
package pers.zww.xml.handler;

import javax.xml.stream.events.StartElement;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; public class SAXParserHandler extends DefaultHandler{
int bookIndex=0;
/*
* 解析XML元素
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
//开始解析book元素的属性 if (qName.equals("book")) {
bookIndex++;
System.out.println("开始遍历第"+bookIndex+"本书"); // //已知book元素下的属性名称,根据属性名称获取属性值
// String value=attributes.getValue("id");
// System.out.println("book的属性值:"+value);
//未知book元素下的属性名称及个数
int num=attributes.getLength();
for (int i = 0; i < num; i++) {
System.out.print("book元素的第"+(i+1)+"个属性名:"+attributes.getQName(i));
System.out.println(" && 属性值:"+attributes.getValue(i)); }
}else if(!qName.equals("book")&&!qName.equals("bookstore")){
System.out.print("节点名:"+qName); }else { }
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String val=new String(ch, start, length);
if (!val.trim().equals("")) {
System.out.println(" && 节点值:"+val);
}
} /*
* 用来遍历xml文件的结束标签
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
//是否针对一本书已经遍历结束
if (qName.equals("book")) {
System.out.println("=======================");
}
} /*
* 用来标志解析开始
*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
//第一行开始
System.out.println("SAX解析开始");
} /*
* 用来标志解析结束
*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
//最后一行结束
System.out.println("SAX解析结束");
}
}

SAXParserHandler.java

SAX与DOM对比

  DOM解析原理:先把XML文件整个加载到内存中,在逐个解析;

  SAX解析原理:通过自己创建的Handler类,去逐个分析遇到的每一个节点;(节点分析是从最外层向里层逐个开始).

参考资料

  慕课网JessicaJiang老师视频教程点击链接

JAVA解析XML之SAX方式的更多相关文章

  1. JAVA解析XML之DOM方式

    JAVA解析XML之DOM方式 准备工作 创建DocumentBuilderFactory对象;    创建DocumentBuilder对象; 通过DocumentBuilder对象的parse方法 ...

  2. Java解析XML文件的方式

    在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...

  3. java解析XML几种方式

    第一种:DOM. DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序 ...

  4. python 解析xml 文件: SAX方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...

  5. [转载] python 解析xml 文件: SAX方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...

  6. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  7. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  8. java解析xml的几种方式

    java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...

  9. JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)

    1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...

随机推荐

  1. (7)python tkinter-菜单栏

    菜单栏 Menu f = tkinter.Menu(root) root['menu']=f f.add_command(label='菜单')# f.add_command(label='关于') ...

  2. (11)centos之vim使用

    ZZ 保存并退出 :x 保存并退出 :q 不保存退出

  3. HDU 1998 奇数阶魔方【模拟填数/注意边界和细节】

    奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. 使用TensorFlow 来实现一个简单的验证码识别过程

    本文我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 1.验 ...

  5. OpenSSL使用2(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12概念说明)(转)

    SSL SSL - Secure Sockets Layer,现在应该叫"TLS",但由于习惯问题,我们还是叫"SSL"比较多.http协议默认情况下是不加密内 ...

  6. Scut游戏服务器引擎6.0.5.0发布-支持C#脚本

    1. 增加C#脚本支持2. 增加Pay和Sns中间件对Mysql数据库支持3. 精简布署步骤,取消Redis写入程序,将其移到游戏底层运行4. 修正Mysql对中文可能会出现乱码的BUG 点击下载:S ...

  7. dedecms让channelartlist标签支持currentstyle属性方

    把dedecms中用channelartlist当导航的站很普遍,但是有的站需要用到当前页中导航样,就是随着不同的页面,导航样式也随着变化. 首先打开include\taglib\channelart ...

  8. oracle行锁select for update

    oracle行锁select for update 学习了:https://blog.csdn.net/zdwzzu2006/article/details/50490157 学习了:https:// ...

  9. 微信小程序 - 答题进度条

    关于进度条的话,我是使用官方原生的progress的. 关于进度progress接受保留2位小数(从后端获取到平均值,再item循环出来) js wxml

  10. NGINX下如何自定义404页面

    什么是404页面 如果碰巧网站出了问题,或者用户试图访问一个并不存在的页面时,此时服务器会返回代码为404的错误信息,此时对应页面就是404页面.404页面的默认内容和具体的服务器有关.如果后台用的是 ...