使用JAXP进行XSLT程序设计
--使用jaxp的dom方式解析xml文档
jaxp提供了DocumentBuilderFactory和DocumentBuilder这两个抽象类来进行dom方式的xml解析。DocumentBuilderFactory类提供了一个设置和获取一个与实现无关的DOM 解析器的方法。DocumentBuilderFactory是多线程不安全的,因此程序员在开发时要自己处理多线程程序(例如servlet和jsp)可能遇到的问题。 DocumentBuilderFactory类中定义的方法如下表。
方法名 | 使用说明 |
Object getAttribute(java.lang.String name) | 通过调用这个方法可以获取具体实现的一些属性。 |
boolean isCoalescing() | 看看是否把DocumentBuilderFactory的状态设置成生成一个能够把CDATA数据转换成text然后到合并相邻的Text的解析器。这里coalesce的意思是“接合”的意思。 |
boolean isExpandEntityReferences() | 看看生成的解析器是否扩展EntityReference。 |
boolean isIgnoringComments() | 看看生成的解析器是否忽略注释。 |
boolean isIgnoringElementContentWhitespace() | 看看生成的解析器是否忽略无用的空白。 |
boolean isNamespaceAware() | 看看生成的解析器是否支持名空间。 |
boolean isValidating() | 看看生成的解析器是否校验。 |
DocumentBuilder newDocumentBuilder() | 根据当前的设置生成一个DocumentBuilder,DocumentBuilder是jaxp中的dom解析器。 |
DocumentBuilderFactory newInstance() |
这个静态方法返回一个DocumentBuilderFactory的实例。生成的具体实例遵循以下规则。
|
void setAttribute(java.lang.String name, java.lang.Object value) | 设置一个同具体实现相关的属性。 |
void setCoalescing(boolean coalescing) | 设置是否进行CDATA转换和合并。缺省情况下是false。 |
void setExpandEntityReferences(boolean expandEntityRef) | 设置是否展开实体引用,缺省情况下是true。 |
void setIgnoringComments(boolean ignoreComments) | 设置是否忽略注释,缺省情况下是false。 |
void setIgnoringElementContentWhitespace(boolean whitespace) | 设置是否忽略可忽略的空白节点,缺省情况下是false。这个功能需要进行校验(validate)。 |
void setNamespaceAware(boolean awareness) | 设置是否支持名空间,缺省为false。 |
void setValidating(boolean validating) | 设置是否校验,缺省为false。 |
DocumentBuilder类定义了一系列的方法接口,通过这些接口,我们可以从一个XML文档或者相应的输入源或者凭空获得一个Document界面的实现对象,换句话说就是可以获得一个文档树。 DocumentBuilder对象可以通过DocumentBuilderFactory类的newDocumentBuilder方法获得。DocumentBuilder不保证在多线程共享一个DocumentBuilder对象时不会出问题,所以,最好不要多个线程共享一个DocumentBuilder对象。DocumentBuilder类中定义的方法如下表。
方法名 | 使用说明 |
DOMImplementation getDOMImplementation() | 获取一个DOMImplementation的实例。DOMImplementation界面的实例可以进行与文档无关的dom操作。 |
boolean isNamespaceAware() | 看看是否支持名空间。 |
boolean isValidating() | 看看是否校验。 |
Document newDocument() | 凭空创建一个新的Document对象。 |
Document parse(java.io.File f) | 从一个文件创建一个Document对象。 |
Document parse(InputSource is) | 从一个InputSource创建一个Document对象。 |
Document parse(java.io.InputStream is) | 从一个输入流创建一个Document对象。 |
Document parse(java.io.InputStream is, java.lang.String systemId) | 从一个输入流创建一个Document对象。并且提供一个解析uri的目录。 |
Document parse(java.lang.String uri) | 从一个uri创建一个Document对象。 |
void setEntityResolver(EntityResolver er) | |
void setErrorHandler(ErrorHandler eh) |
下面的代码演示了如何使用DocumentBuilder和DocumentBuilderFactory来进行解析。
最后我们用一个完整的例子来演示如何使用jaxp进行dom方式的xml程序设计。这个例子还是我们前面曾经演示过的留言板程序,但是使用jaxp代替了xerces作为xml解析器。