SAX解析XML文件
来源:互联网 发布:淘宝背景图片素材 编辑:程序博客网 时间:2024/06/14 13:13
在java中,原生解析xml文档的方式有两种,分别是:Dom解析和Sax解析
Sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档
Sax采用事件驱动的方式解析文档。
在Sax的解析过程中,读取到文档开头、结尾,元素的开头和元素的结尾都会触发一些回调方法,你可以在这些回调方法中进行相应事件处理这四个方法是:startDocument() 、 endDocument()、 startElement()、 endElement此外,光读取到节点处是不够的,我们还需要characters()方法来仔细处理元素内包含的内容将这些回调方法集合起来,便形成了一个类,这个类也就是我们需要的触发器SaxHandler
更详细的介绍可查看API文档—-> defaultHandler
代码如下:
package com.vgbh;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;public class SaxXMLDemo { public static void main(String[] args) { SaxXMLDemo sxd = new SaxXMLDemo(); String uri = "bookstore.xml"; try { sxd.querySaxXMLDemo (uri); } catch (Exception e) { e.printStackTrace(); } } //读取XML文件 private void querySaxXMLDemo(String uri) throws Exception { /* * 该方法主要依赖于SaxHandler类的方法重写 */ //实例化SAXparseFactory对象 SAXParserFactory spFactory = SAXParserFactory.newInstance(); //创建解析器 SAXParser sParser = spFactory.newSAXParser(); //获取需要解析的文档,生成解析器,最后解析文档 SaxHandler sh = new SaxHandler(); sParser.parse(uri, sh); }}class SaxHandler extends DefaultHandler { //character代表传回来的字符数组,内容包含元素。start数组开始的位置。end数组结束的位置。 public void characters (char[] character, int start, int end) throws SAXException { String content = new String(character, start, end); System.out.println(content); super.characters(character, start, end); } public void startDocument () throws SAXException { System.out.println("开始解析文档..."); super.startDocument(); } public void endDoucement () throws SAXException{ System.out.println("结束解析文档..."); super.endDocument(); } //uri是名称空间URI localNmae是本地名称 qName是限定名称 attribute很明显是属性的集合 以上的四种变量若不可用,则为空。 public void startElement (String uri, String localName, String qName, Attributes attribute) throws SAXException { //System.out.print("开始解析元素..."); if (attribute != null) { for (int i = 0; i < attribute.getLength(); i ++) { //getQName()是获取属性名称 System.out.print(attribute.getQName(i) + "=\"" + attribute.getValue(i) + "\""); } } System.out.print(qName + ":"); super.startElement(uri, localName, qName, attribute); } //uri是名称空间URI arg1是本地名称 qName是限定名称 以上的三种变量若不可用,则为空 public void endElement (String uri, String localNmae, String qName) throws SAXException { //System.out.print(qName); //System.out.print("结束解析元素..."); super.endElement(uri, localNmae, qName); }}
SAX解析XML文件主要依靠的是对SaxHandler类的方法重写,所以理解原生类的函数很重要。
SaxHandler类在线API:
http://docs.basex.org/javadoc/org/basex/build/xml/SAXHandler.html
有问题可以联系我的邮箱。
阅读全文
0 0
- xml文件解析-SAX
- sax解析xml文件
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析xml文件
- SAX解析xml文件
- XML文件解析 sax
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- sax 解析xml文件
- xml文件Sax解析
- SAX 解析XML 文件
- SAX 解析Xml文件
- javaScript基础学习(一)
- lua学习总结
- html制作表单
- C语言结构体变量和结构体变量的指针作函数参数例题
- java-Socket实现多线程服务器程序
- SAX解析XML文件
- IO流
- Python装饰器----应用示例(一)
- Iterator、Iterable接口的使用及详解
- 接口
- Sunscreen POJ
- HAProxy知识总结
- MyFlag Step13:打卡功能的初步讨论
- c语言web服务器