SAX解析XML
一、XML?
XML:eXtensible Makeup Language可扩展标记语言
二、SAX
SAX:simple api for xml,是一个事件监听接口,同时又是一个软件包
三、工作原理
SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。
SAX API是一个基于事件的API ,适用于处理数据流,即随着数据的流动而依次处理数据。
SAX API在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会被抛弃。
SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。
DefaultHandler就是实现了上面的四个事件处理器接口,然后提供了每个抽象方法的默认实现,即DefaultHandler是一个适配器
四、例子
1.xml
<?xml version="1.0" encoding="UTF-8"?>
<students><student id="1000"><username>linys</username>
<password>linys</password>
</student>
<student id="1001">
<username>wangzd</username>
<password>wangzd</password>
</student>
</students>
2.解析程序
(1)继承DefaultHandler
/**
*
* @Project: XMLParse
* @Desciption: 自定义的ContentHandler
* SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。
* SAX API是一个基于事件的API ,适用于处理数据流,即随着数据的流动而依次处理数据。
* SAX API在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会被抛弃。
SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。
DefaultHandler就是实现了上面的四个事件处理器接口,然后提供了每个抽象方法的默认实现,即DefaultHandler是一个适配器
*
*
* 其中方法的执行顺序是:
* startDocument
*
* 每种不一样的标签启动不一样的事件(方法)
* 开始标签--startElement
* 结束标签--endElement
* 两标签间的内容(会自动提出换行)---characters
*
* endDocument
*
* @Author: LinYiSong
* @Date: 2011-4-1~2011-4-1
*/
class MyContentHandler extends DefaultHandler{
private String tagName;
private String id;
private String userName;
private String password;
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println("characters in "+tagName+"="+new String(ch,start,length)+"!");
if("username".equals(tagName)){
userName=new String(ch,start,length);
}
if("password".equals(tagName)){
password=new String(ch,start,length);
}
}
@Override
public void startDocument() throws SAXException {
System.out.println("Document--start");
}
@Override
public void endDocument() throws SAXException {
System.out.println("Document--end");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("ElementStart in "+localName);
tagName=qName;
if("student".equals(tagName)){
id=attributes.getValue("id");
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("ElementEnd in "+localName);
if("student".equals(qName)){
System.out.println("id="+id+" ,username="+userName+" ,password="+password);
}
tagName=null;
}
(2)调用解析
//解析
//生成SAX解析器工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
try {
//从解析器中取出XMLReader
XMLReader reader=factory.newSAXParser().getXMLReader();
//注册ContentHandler
reader.setContentHandler(new MyContentHandler());
//指定解析的xml文件
reader.parse(new InputSource(new StringReader(content)));
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
其中content是指xml文件内容String形式
- 大小: 40.8 KB
分享到:
相关推荐
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
Sax解析XML文件解
Java SAX解析Xml Demo(详细注释)
Servlet利用SAX解析XML文档,JAX,JSWDP,Servlet利用SAX解析XML文档
Sax解析xml文件详细例子,解析复杂节点的xml,把内容显示到view中,例子简单完整,易用
Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有...
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
使用sax解析xml的源代码
java学习笔记——使用DOM解析XML和使用SAX解析XML
sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点
NULL 博文链接:https://wang-peng1.iteye.com/blog/1133695
绝对可用的SAX解析XML文件项目,费了九牛二虎之力,才找到的好资源,特与大家共享出来。直接导入eclipse就可运行,无需任何配置。
Android SAX 解析XML SAX 解析XML(通用)
DOM和SAX解析XML文档
JAVA SAX解析XMLJAVA SAX解析XMLJAVA SAX解析XML
sax解析xml本地读取xml,希望对你有用
SAX解析XML源码:安卓客户端程序,通过HTTP协议从服务器端获取XML文件,然后解析并输出到控制台
使用sax解析xml,有详细的解析及源代码实例
NULL 博文链接:https://mazhihui.iteye.com/blog/1535280
Sax解析xml中的某个(一部分报文节点)循环组的内容