javax.xml.xpath

接口
异常
java.lang.Object
  继承者 javax.xml.xpath.XPathFactory

public abstract class XPathFactory
     
extends Object

XPathFactory 实例可用于创建 XPath 对象。

有关查找机制,请参阅 newInstance(String uri)

XPathFactory 类不是线程安全的。换句话说,应用程序负责确保任意给定时刻最多只有一个线程使用 XPathFactory 对象。建议实现将方法标记为 synchronized 以保护客户端不至于崩溃。

XPathFactory 不可重入。当正在调用某个 newInstance 方法时,应用程序不能试图以递归方式调用 newInstance 方法,即使是从相同的线程调用。

从以下版本开始:
1.5

字段摘要
static String DEFAULT_OBJECT_MODEL_URI
          默认 Object Model URI。
static String DEFAULT_PROPERTY_NAME
          遵守 JAXP 规范的默认属性名称。
 
构造方法摘要
protected XPathFactory()
          应使用 newInstance()newInstance(String uri)newInstance(String uri, String factoryClassName, ClassLoader classLoader) 之类的受保护构造方法创建 XPathFactory 的新实例。
 
方法摘要
abstract  boolean getFeature(String name)
          获取指定功能的状态。
abstract  boolean isObjectModelSupported(String objectModel)
          此 XPathFactory 是否支持指定的对象模型
static XPathFactory newInstance()
          获取使用默认对象模型 DEFAULT_OBJECT_MODEL_URI(即 W3C DOM)的新 XPathFactory 实例。
static XPathFactory newInstance(String uri)
          获取使用指定对象模型的新 XPathFactory 实例。
static XPathFactory newInstance(String uri, String factoryClassName, ClassLoader classLoader)
          根据工厂类名称获取一个新 XPathFactory 实例。
abstract  XPath newXPath()
          返回使用实例化 XPathFactory 时确定的底层对象模型的新 XPath
abstract  void setFeature(String name, boolean value)
          设置此工厂所创建的此 XPathFactoryXPath 的功能。
abstract  void setXPathFunctionResolver(XPathFunctionResolver resolver)
          建立默认函数解析器。
abstract  void setXPathVariableResolver(XPathVariableResolver resolver)
          建立默认变量解析器。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

DEFAULT_PROPERTY_NAME

public static final String DEFAULT_PROPERTY_NAME

遵守 JAXP 规范的默认属性名称。

另请参见:
常量字段值

DEFAULT_OBJECT_MODEL_URI

public static final String DEFAULT_OBJECT_MODEL_URI

默认 Object Model URI。

另请参见:
常量字段值
构造方法详细信息

XPathFactory

protected XPathFactory()

应使用 newInstance()newInstance(String uri)newInstance(String uri, String factoryClassName, ClassLoader classLoader) 之类的受保护构造方法创建 XPathFactory 的新实例。

方法详细信息

newInstance

public static final XPathFactory newInstance()

获取使用默认对象模型 DEFAULT_OBJECT_MODEL_URI(即 W3C DOM)的新 XPathFactory 实例。

此方法的功能等效于:

   newInstance(DEFAULT_OBJECT_MODEL_URI)
 

因为 W3C DOM 的实现总是可用的,因此此方法永远不会失败。

返回:
XPathFactory 的实例。
抛出:
RuntimeException - 创建默认对象模型的 XPathFactory 遇到故障时。

newInstance

public static final XPathFactory newInstance(String uri)
                                      throws XPathFactoryConfigurationException

获取使用指定对象模型的新 XPathFactory 实例。

为了查找 XPathFactory 对象,此方法按以下顺序查找以下位置,其中“类加载器”指上下文类加载器:

  1. 如果存在系统属性 DEFAULT_PROPERTY_NAME + ":uri"(其中 uri 是此方法的参数),则其值作为类名称读取。该方法将试图通过使用类加载器创建此类的新实例,如果创建成功,则返回它。
  2. 读取 ${java.home}/lib/jaxp.properties,并查找与作为系统属性的键关联的值。如果存在,则按上面的方式处理该值。
  3. 类加载器要求服务提供者的提供者配置文件与资源目录 META-INF/services 中的 javax.xml.xpath.XPathFactory 匹配。有关文件格式和解析规则,请参阅 JAR File Specification。每个可能的服务提供者均要实现该方法:
           isObjectModelSupported(String objectModel)
         
    返回支持指定对象模型的类加载器顺序中的第一个服务提供者。
  4. 以特定于平台的方式来定位平台默认的 XPathFactory。必须存在 W3C DOM 的平台默认 的 XPathFactory,即 DEFAULT_OBJECT_MODEL_URI

如果这些都失败,则抛出 XPathFactoryConfigurationException

疑难解答提示:

有关如何精确解析属性文件的信息,请参阅 Properties.load(java.io.InputStream)。尤其是,冒号 ':'在属性文件中需要转义,因此要确保 URI 在其中进行正确转义。例如:

   http\://java.sun.com/jaxp/xpath/dom=org.acme.DomXPathFactory
 

参数:
uri - 标识底层对象模型。规范只定义了 URI DEFAULT_OBJECT_MODEL_URI、用于 W3C DOM 的 http://java.sun.com/jaxp/xpath/dom、org.w3c.dom 包。至于其他对象模型,实现可随意引入其他 URI。
返回:
XPathFactory 的实例。
抛出:
XPathFactoryConfigurationException - 如果指定的对象模型不可用。
NullPointerException - 如果 urinull
IllegalArgumentException - 如果 urinulluri.length() == 0

newInstance

public static XPathFactory newInstance(String uri,
                                       String factoryClassName,
                                       ClassLoader classLoader)
                                throws XPathFactoryConfigurationException

根据工厂类名称获取一个新 XPathFactory 实例。如果指定的工厂类支持指定的对象模型,则返回 XPathFactory。当类路径中有多个提供者时此函数很有用。它给了应用程序更多的控制权,因为它能指定应该加载哪个提供者。

疑难解答提示

设置 jaxp.debug 系统属性将导致此方法将许多调试消息打印到 System.err,以说明正在执行的操作以及在何处查找。

如有问题,请尝试:

 java -Djaxp.debug=1 YourProgram ....
 

参数:
uri - 标识底层对象模型。规范只定义了 URI DEFAULT_OBJECT_MODEL_URI、用于 W3C DOM 的 http://java.sun.com/jaxp/xpath/dom、org.w3c.dom 包。至于其他对象模型,实现可随意引入其他 URI。
factoryClassName - 完全限定工厂类名称,提供 javax.xml.xpath.XPathFactory 的实现。
classLoader - 用来加载工厂类的 ClassLoader。如果为 null,则使用当前 Thread 的上下文 classLoader 来加载工厂类。
返回:
新的 XPathFactory 实例
抛出:
XPathFactoryConfigurationException - 如果 factoryClassNamenull、工厂类不能被加载或实例化、工厂类不支持 uri 参数中指定的对象模型。
NullPointerException - 如果 urinull
IllegalArgumentException - 如果 urinulluri.length() == 0
从以下版本开始:
1.6
另请参见:
newInstance(), newInstance(String uri)

isObjectModelSupported

public abstract boolean isObjectModelSupported(String objectModel)

XPathFactory 是否支持指定的对象模型

参数:
objectModel - 指定返回的 XPathFactory 理解的对象模型。
返回:
如果 XPathFactory 支持 objectModel,则返回 true,否则返回 false
抛出:
NullPointerException - 如果 objectModelnull
IllegalArgumentException - 如果 objectModel.length() == 0

setFeature

public abstract void setFeature(String name,
                                boolean value)
                         throws XPathFactoryConfigurationException

设置此工厂所创建的此 XPathFactoryXPath 的功能。

功能名称是完全限定的 URI。实现可以定义它们自己的功能。如果此 XPathFactory 或其创建的 XPath 不支持该功能,则抛出 XPathFactoryConfigurationExceptionXPathFactory 可以公开功能值,但不能更改其状态。

所有实现必须支持 XMLConstants.FEATURE_SECURE_PROCESSING 功能。当功能为 true 时,任何对外部函数的引用均是错误的。在这些条件下,实现不能调用 XPathFunctionResolver 且必须抛出 XPathFunctionException

参数:
name - 功能名称。
value - 功能状态为 truefalse
抛出:
XPathFactoryConfigurationException - 如果此 XPathFactory 或其创建的 XPath 不支持此功能。
NullPointerException - 如果 namenull

getFeature

public abstract boolean getFeature(String name)
                            throws XPathFactoryConfigurationException

获取指定功能的状态。

功能名称是完全限定的 URI。实现可以定义它们自己的功能。如果此 XPath 或其创建的 XPathFactory 不支持该功能,则抛出 XPathFactoryConfigurationExceptionXPathFactory 可以公开功能值,但不能更改其状态。

参数:
name - 功能名称。
返回:
指定功能的状态。
抛出:
XPathFactoryConfigurationException - 如果此 XPathFactory 或其创建的 XPath 不支持此功能。
NullPointerException - 如果 namenull

setXPathVariableResolver

public abstract void setXPathVariableResolver(XPathVariableResolver resolver)

建立默认变量解析器。

从此工厂构造的任何 XPath 对象将默认使用指定的解析器。

如果 resolvernull,则抛出 NullPointerException

参数:
resolver - 变量解析器。
抛出:
NullPointerException - 如果 resolvernull

setXPathFunctionResolver

public abstract void setXPathFunctionResolver(XPathFunctionResolver resolver)

建立默认函数解析器。

从此工厂构造的任何 XPath 对象将默认使用指定的解析器。

如果 resolvernull,则抛出 NullPointerException

参数:
resolver - XPath 函数解析器。
抛出:
NullPointerException - 如果 resolvernull

newXPath

public abstract XPath newXPath()

返回使用实例化 XPathFactory 时确定的底层对象模型的新 XPath

返回:
XPath 的新实例。