核心提示:TestSax类:package day06_parser.sax;/** * xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写, * 中文含义是:用于...
TestSax类:
package day06_parser.sax; /** * xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写, * 中文含义是:用于XML文档处理的使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准。 * 下面我们研究两种解析方式: * 1.dom解析 2.sax解析:Simple API for XML * 下面是dom解析的实例。 * JAXP-DOM解析实例: * 下面的实例实现的功能是,通过javax.xml包实现sax方式的xml的解析 * 具体的操作有增加节点,删除节点,修改节点内容,查询节点信息 */ import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import day06_parser.domain.Book; public class TestSax { /* xml的第二种解析方式:sax:simple api for xml 1.SAX 是事件驱动的 XML 处理方法 2.逐行扫描文档,一边扫描一边解析 3.SAX来说就是操作复杂 4.仅需实现部分接口时扩展org.xml.sax.helpers.DefaultHandler类 5.DefaultHandler类默认的空实现 */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub demo1(); } public static void demo1() throws Exception{ //1.工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); //2.解析器 SAXParser parser=factory.newSAXParser(); //解析xml //定义默认的defaultHander类,处理的方法 MyDefaultHandler dh=new MyDefaultHandler(); parser.parse(new File("db.xml"), dh); ListallBookList = dh.getData(); //获得所有的书籍(JavaBean)数据 for (Book book : allBookList) { System.out.println(book); } //###############################3 //存放方式1: 一个map存放一本书 Map data = new HashMap (); data.put("id", "b001"); data.put("title", "xxxx"); data.put("price", "100"); //方式2:面向对象,用于封装数据对象,JavaBean Book book = new Book(); book.setId("b001"); book.setTitle("java web"); } }
sax解析的核心类:MyDefaultHander类
package day06_parser.sax;
//这个类就是sax解析的核心类。
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import day06_parser.domain.Book;
public class MyDefaultHandler extends DefaultHandler {
//1用于缓存处理数据
private List data;
// 4 用于缓存当前的标签名称(元素名称)
private String elementName;
//以上的这些数据在dom方式里面存储在document对象里面了。
@Override
public void startDocument() throws SAXException {
//2对容器进行初始化
data = new ArrayList();
}
/**
* * xml没有约束
* uri # null
* localname#null
* qName # 元素名称
* * xml 约束
* uri # 命名空间值 targatNamespace="xxxxx"
* localname # 元素名称
* qName # 前缀:名称
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("book".equals(qName)){
// 3.1 说明解析到了一个新书
Book book = new Book();
// 3.2 添加到list中
data.add(book);
// 3.3 缓存id属性
book.setId(attributes.getValue("id"));
}
this.elementName = qName;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String value = new String(ch, start, length);
if("title".equals(elementName)){
//value 表示title的数据
data.get(data.size() - 1).setTitle(value);
}
if("price".equals(elementName)){
//value 表示title的数据
data.get(data.size() - 1).setPrice(value);
}
if("author".equals(elementName)){
//value 表示title的数据
data.get(data.size() - 1).setAuthor(value);
}
//使用过后清空缓存
this.elementName = null;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("元素结束");
}
@Override
public void endDocument() throws SAXException {
System.out.println("文档结束");
}
/**
* 用于返回处理过的所有数据
* @return
*/
public List getData() {
return data;
}
}
另外还用到了两个类:
book类-javebean:
package day06_parser.domain;
/**
* 普通的类,她就是javabean
* * 提供相应的私有字段,封装数据
* * 提供字段的相应的getter或setter方法
* @author hym
*
*/
public class Book {
private String id;
private String title;
private String price;
private String author;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book [id=" + id + ", title=" + title + ", price=" + price
+ ", author=" + author + "]";
}
}
需要解析的xml文件:
db.xml
android
28
胡爷
修改了节点的文本内容
修改了节点的文本内容 修改了节点的文本内容
修改了节点的文本内容 修改了节点的文本内容
修改了节点的文本内容 修改了节点的文本内容
作者:网络 来源:xml解析技术-ja
上一篇:xml解析-jaxp之dom解析 下一篇:畅谈HTML开发
本类热门
- 06-26·Leaflet加载GeoServer发布的WMTS地图服务(代码实例)
- 04-12·百度地图只显示道路,不显示建筑的实现方法
- 04-19·could not initialize Proxifier kext问题记录
- 06-29·百度地图创建标注标签maker与Label的实战教程
- 03-02·Echartstooltip自定义formatter设置字体颜色
- 05-28·iview Tooltip换行及渲染的解决方案
- 06-19·如何快速获取WWDC2013的所有视频及文档
- 06-26·Swiper自动滚屏错位问题的解决办法
- 04-17·MDCT/MDST,IMDCT与DCT-IV的关系以及快速FFT实现详解
- 05-17·webpack4.x打包图片时报错如何解决?
本类推荐
- 没有
本类固顶
- 没有
- 易笔记(art.yibiji.com) © 2025 版权所有 All Rights Reserved.
- 本站部分内容收集于互联网若有侵权请联系站长删除 鄂ICP备18030946号-1


