Java SAX 解析

DOM 解析参考:Java DOM 解析

 

# 无 Validation

 


SAXParserFactory fact = SAXParserFactory.newInstance(); fact.setNamespaceAware(true); SAXParser parser = fact.newSAXParser(); XMLReader reader = parser.getXMLReader(); ContentHandler handler = ...; ErrorHandler errorHandler = ...; reader.setContentHandler(handler); reader.setErrorHandler(errorHandler); URL url = ...; reader.parse(url.toString());

 

o 主要API:

    - javax.xml.parsers.SAXParserFactory

    - javax.xml.parsers.SAXParser

    - org.xml.sax.XMLReader

    - org.xml.sax.ContentHandler

    - org.xml.sax.ErrorHandler

    - org.xml.sax.DefaultHandler: 实现了 ContentHandler 和 ErrorHandler 接口

 

o ContentHandler

主要的方法

    - startDocument

    - endDocument

    - startElement

    - characters

 

文本(包括空白)、CDATA 都会以 characters() 通知

文本中的 Entity会被替换,如 &lt;替换为 <

 

o ErrorHandler

ErrorHandler 接口定义了3个回掉方法:

    - warning:警告,但合法

    - error:Validation 失败时

    - fatalError:XML 不是 well formed

warning()/error() 只在启用了 Validation 时才会发生

3个方法都可以抛出 SaxException。如果抛出 SaxException 则 SAX 解析过程终止

 

# DTD Validation

要启用 DTD Validation,调用

SAXParserFactory.setValidating(true);

解析器会根据XML文档中 DOCTYPE 声明中的 URI 去加载 DTD。如果 DTD文件找不到,SaxParser.parse() 会抛出 IOException

如果解析的XML来自 InputStream,可以使用 SaxParser.parse(InputSource),其参数类型 InputSource 可包装一个 InputStream

通过以下方法对其进行设置:

    - setSystemId():设置 DOCTYPE SYSTEM URI,对应 <!DOCTYPE root-element SYSTEM "URI">

    - setPublicId():设置 DOCTYPE PUBLIC URI,对应 <!DOCTYPE root-element PUBLIC "name" "URI">

    - setEncoding()

 

 

 

 

 

 

posted @ 2013-08-05 21:10  Jack of Hearts  阅读(395)  评论(0编辑  收藏  举报