SAX is an abbreviation and means "Simple API for XML". A Java SAX XML parser is a stream oriented XML parser. It works by iterating over the XML and call certain methods on a "listener" object when it meets certain structural elements of the XML. For instance, it will call the listener object for the following "events":

- startDocument
- startElement
- characters
- comments
- processing instructions
- endElement
- endDocument

This list is probably not complete, but it is long enough to give you an idea of how it works. Let's move on to see how you create and use a Java SAX Parser.

SAXParserFactory factory = SAXParserFactory.newInstance();
try { InputStream xmlInput = new FileInputStream("theFile.xml");
SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new SaxHandler();
saxParser.parse(xmlInput, handler); } catch (Throwable err) {
err.printStackTrace ();
}

When you call the SAXParser.parse() method the SAX parser starts the XML processing. The xmlInput InputStream passed as parameter to the parse() method is where the XML is read from.Notice the SaxHandler instance being created, and passed as parameter to the parse() method. The SaxHandler class is a subclass of the class org.xml.sax.helpers.DefaultHandler. The DefaultHandler class comes with the JDK.

While processing the XML the SAXParser calls methods in the DefaultHandler subclass (here, the SaxHandler) instance corresponding to what the parser finds in the XML file. To react to those method calls you override the corresponding methods in the DefaultHandler subclass. Here is an example:

public class SaxHandler extends DefaultHandler {

    public void startDocument() throws SAXException {
} public void endDocument() throws SAXException {
} public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException { } public void endElement(String uri, String localName, String qName)
throws SAXException {
} public void characters(char ch[], int start, int length)
throws SAXException {
} public void ignorableWhitespace(char ch[], int start, int length)
throws SAXException {
} }

It is the responsibility of the DefaultHandler subclass to extract any necessary information from the XML via these methods. If you need to build an object graph based on an XML file, you will have to build that object graph inside the DefaultHandler subclass.

import java.io.FileInputStream;
import java.io.InputStream; 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 TestSAXParser {
public static void test() {
SAXParserFactory factory = SAXParserFactory.newInstance();
try { InputStream xmlInput = new FileInputStream("theFile.xml");
SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new SaxHandler();
saxParser.parse(xmlInput, handler); } catch (Throwable err) {
err.printStackTrace();
}
}
public static void main(String[] args) {
TestSAXParser.test();
}
} class SaxHandler extends DefaultHandler { public void startDocument() throws SAXException {
} public void endDocument() throws SAXException {
} public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println(uri + ":" + localName + ":" + qName);
} public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println(uri + ":" + localName + ":" + qName);
} public void characters(char ch[], int start, int length)
throws SAXException {
} public void ignorableWhitespace(char ch[], int start, int length)
throws SAXException {
} }

Java SAX Parser的更多相关文章

  1. Java SAX handle xml

    https://www.journaldev.com/1198/java-sax-parser-example Java SAX Parser Example   SAX Parser in java ...

  2. Java SAX DefaultHandler

    The org.xml.sax.helpers.DefaultHandler class is the base class for "listeners" in SAX 2.0. ...

  3. Java Sax解析

    一.   Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode.如下面的这段boo ...

  4. 菜鸟调错(一)——Maven项目部署到Jboss出现:Failed to create a new SAX parser

    今天调试的时候遇到一个错误,往Jboss的deploy目录扔war包的时候,报了一个“Failed to create a new SAX parser”的错误.在网上找了找解决方案,一般都说将项目中 ...

  5. jsoup: Java HTML Parser

    jsoup  Java HTML Parser jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于j ...

  6. Java sax、dom、pull解析xml

    -------------------------------------SAX解析xml---------------------------------- >Sax定义 SAX是一个解析速度 ...

  7. java & xml parser

    参考: JDK8 API: http://docs.oracle.com/javase/8/docs/api/ DOM: http://www.w3.org/TR/2004/REC-DOM-Level ...

  8. jsoup: Java HTML Parser (类似jquery)

    jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extr ...

  9. Java SAX Schema Validation

    It is possible to turn on XML Schema validation during parsing with a SAXParser. Here is how it look ...

随机推荐

  1. linux cd命令不带路径参数

    #切换到当前用户的主目录.若为root用户,则切换到/root,若普通用户,则切换到/home/username $ cd

  2. 设置window窗口的背景色为护眼色

    win7设置:桌面右键 -> 个性化 -> 窗口颜色 -> 高级外观设置 ->  '项目'下拉菜单 ->  '窗口'

  3. JVM内存状况查看方法和分析工具

    Java本身提供了多种丰富的方法和工具来帮助开发人员查看和分析GC及JVM内存的状况,同时开源界和商业界也有一些工具可用于查看.分析GC及JVM内存的状况.通过这些分析,可以排查程序中内存泄露的问题及 ...

  4. ANDROID_MARS学习笔记_S01_004dpi、dp(dip)及计算

    一.dpi.dp介绍 sp会随着用户在手机中设置字体大小而改变,而dp不会 二.1.dpsp_layout.xml <?xml version="1.0" encoding= ...

  5. C++中的指针与const

    刚开始接触C++时,指针和const之间的关系有点混乱,现在总结如下: 一.指向const变量的指针 #include<iostream.h> void main() { const in ...

  6. 【剑指offer】求逆序对的个数

    2013-09-07 10:50:31 面试题36:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字构成一个逆序对.输入一个数组,求出这个数组中逆序对的总数. 小结: 最直观的的方法是: ...

  7. Android 签名(6)编译时源码的签名

    1,使用源码中的默认签名 在源码中编译一般都使用默认签名的,在某源码目录中用运行下面命令能看到签名命令. $ mm showcommands Android提供了签名的程序signapk.jar,用法 ...

  8. poj 2506 Tiling(递推 大数)

    题目:http://poj.org/problem?id=2506 题解:f[n]=f[n-2]*2+f[n-1],主要是大数的相加; 以前做过了的 #include<stdio.h> # ...

  9. 漫长的补结题报告之路 poj3622

    题意(引用):题意:有很多种草,有两个属性:价格和新鲜度:有很多牛,它们都会各自需求一种草,要求是其价格最低为ai,新鲜度最低为bi,且这些牛不希望自己的草和别人的一样.问要满足所有需求的最小花费是多 ...

  10. poj2828

    很容易想到一种动态的做法:平衡树…… 或者是二分+树状数组 但,前者编程复杂度较大,而且据说会被卡(没试过):后者理论上超时(据说可以擦边过?): 所以要尝试新的算法: 倒着考虑,显然最后一个对象的位 ...