使用JAXP进行XSLT程序设计
--使用jaxp1.1的SAX方式解析xml文档
jaxp提供了SAXParserFactory和SAXParser这两个抽象类来进行基于SAX的XML解析工作。SAXParserFactory是使用jaxp的SAX方式进行xml文件解析的起点,SAXParserFactory可以用来设置和获取一个SAXParser。SAXParserFactory不是多线程安全的,所以在开发时程序员要自己解决多线程问题。SAXParserFactory中的方法如下表。
方法名 | 使用说明 |
boolean getFeature(java.lang.String name) | 获取一个Feature。 |
boolean isNamespaceAware() | 看看解析器是否支持名空间。 |
boolean isValidating() | 看看解析器是否校验。 |
static SAXParserFactory newInstance() | 静态方法,调用这个方法可以获取一个新的SAXParserFactory的实例。 |
SAXParser newSAXParser() | 根据现有的设置,例如是否支持名空间,是否校验,创建一个新的SAXParser。 |
void setFeature(java.lang.String name, boolean value) | 设定一个Feature。 |
void setNamespaceAware(boolean awareness) | 设定是否支持名空间。 |
void setValidating(boolean validating) | 设定是否支持校验。 |
在通过SAXParserFactory获取了一个SAXParser之后,我们就可以进行实际的处理工作了。如果您对SAX方式不是很熟悉,请访问我在介绍apache/ibm开发的Xerces解析器时写的关于SAX的介绍性文章。JAXP的SAXParser隐含了一个SAX2中的XMLReader。因此如果您熟悉XMLReader的使用的话,掌握SAXParser的使用简直就是小菜一碟。
在抽象类SAXParser中定义的方法如下表。
方法名 | 使用说明 |
Parser getParser() | 这是一个SAX1的方法,返回一个SAX1的parser。 |
Object getProperty(java.lang.String name) | 获取一个property,和XMLReader中的一样。 |
XMLReader getXMLReader() | 获取和这个SAXParser相关的XMLReader。 |
boolean isNamespaceAware() | 看看是否支持名空间。 |
boolean isValidating() | 看看是否校验。 |
parse(java.io.File f, DefaultHandler dh) | 通过一个File和一个DefualtHandler进行SAX解析。 |
parse(java.io.File f, HandlerBase hb) | SAX1方法。功能同上。 |
parse(InputSource is, DefaultHandler dh) | 通过一个InputSource和一个DefaultHandler进行SAX解析。 |
parse(InputSource is, HandlerBase dh) | SAX1方法,功能同上。 |
void parse(java.io.InputStream is, DefaultHandler dh) | 通过一个Stream和一个DefaultHandler进行SAX解析。 |
void parse(java.io.InputStream is, DefaultHandler dh, java.lang.String systemId) | 通过一个Stream和一个DefaultHandler进行SAX解析。并且给这个流一个System ID。 |
void parse(java.io.InputStream is, HandlerBase hb) | SAX1方法。通过一个Stream和一个HandlerBase进行SAX解析。 |
void parse(java.io.InputStream is, HandlerBase hb, java.lang.String systemId) | SAX1方法。通过一个Stream和一个HandlerBase进行SAX解析。并且给这个流一个System ID。 |
void parse(java.lang.String uri, DefaultHandler dh) | 通过一个uri和一个DefaultHandler进行SAX解析。 |
void parse(java.lang.String uri, HandlerBase hb) | SAX1方法,功能同上。 |
abstract void setProperty(java.lang.String name, java.lang.Object value) | 设置一个property。同XMLReader中的同名方法。 |
下面的代码演示了如何使用JAXP的SAXParser。
不过本人更倾向使用下面的方式。