XPath 提供对 XPath 评估环境和表达式的访问。 XPath 评估受下表中描述的因素影响。
| 因素 | 行为 |
|---|---|
| context | 上下文的类型是依赖于实现的。如果值为 null,则操作必须不依赖于上下文,否则将抛出 XPathExpressionException。为了评估 XPath 表达式,将 DocumentFragment 视为文档节点。 |
| 变量 | 如果表达式包含变量引用,将通过 XPathVariableResolver 和 setXPathVariableResolver(XPathVariableResolver resolver) 集找到它的值。如果变量解析器未定义或解析器为变量返回 null,则会引发 XPathExpressionException 。在任何单个评估过程中,变量的值必须是不可变的。 |
| 功能 | 如果表达式包含函数引用,将通过 XPathFunctionResolver 和 setXPathFunctionResolver(XPathFunctionResolver resolver) 集找到该函数。如果函数解析器未定义或函数解析器为函数返回 null,则会引发 XPathExpressionException 。 |
| QNames | 表达式中的 QName 是根据用 setNamespaceContext(NamespaceContext nsContext) 设置的 XPath 命名空间上下文解析的。 |
| 结果 | 计算表达式的结果将转换为所需返回类型的实例。 XPathConstants 中定义了有效的返回类型。转换为返回类型遵循 XPath 转换规则。 |
XPath 对象不是线程安全的,也不是可重入的。换句话说,应用程序有责任确保在任何给定时间不从多个线程使用一个 XPath 对象,并且在调用 evaluate 方法时,应用程序不得递归调用 evaluate 方法。
- 自从:
- 1.5
- 参见:
-
方法总结
修饰符和类型方法描述编译 XPath 表达式以供以后评估。在指定上下文中计算 XPath 表达式并将结果作为String返回。在指定上下文中计算XPath表达式并将结果作为指定类型返回。evaluate(String expression, InputSource source) 在指定的InputSource上下文中计算 XPath 表达式并将结果作为String返回。evaluate(String expression, InputSource source, QName returnType) 在指定InputSource的上下文中计算 XPath 表达式,并将结果作为指定类型返回。default XPathEvaluationResult<?>evaluateExpression(String expression, Object item) 在指定上下文中计算 XPath 表达式。default <T> TevaluateExpression(String expression, Object item, Class<T> type) 在指定的上下文中计算 XPath 表达式并返回具有通过class type指定的类型的结果default XPathEvaluationResult<?>evaluateExpression(String expression, InputSource source) 在指定上下文中计算 XPath 表达式。default <T> TevaluateExpression(String expression, InputSource source, Class<T> type) 在指定的source的上下文中计算 XPath 表达式并返回指定的结果。返回当前命名空间上下文。返回当前函数解析器。返回当前变量解析器。voidreset()将此XPath重置为其原始配置。voidsetNamespaceContext(NamespaceContext nsContext) 建立命名空间上下文。void建立功能解析器。void建立变量解析器。
-
方法详情
-
reset
void reset()将此XPath重置为其原始配置。XPath重置为与使用XPathFactory.newXPath()创建时相同的状态。reset()旨在允许重用现有的XPaths,从而节省与创建新的XPaths 相关的资源。不能保证重置
XPath具有相同的XPathFunctionResolver、XPathVariableResolver或NamespaceContextObject,例如Object.equals(Object obj)。它保证具有功能相同的XPathFunctionResolver、XPathVariableResolver和NamespaceContext。 -
setXPathVariableResolver
建立变量解析器。如果
resolver是null则抛出NullPointerException。- 参数:
resolver- 变量解析器。- 抛出:
NullPointerException- 如果resolver是null。
-
getXPathVariableResolver
XPathVariableResolver getXPathVariableResolver()返回当前变量解析器。null在没有变量解析器生效时返回。- 返回:
- 当前变量解析器。
-
setXPathFunctionResolver
建立功能解析器。如果
resolver是null则抛出NullPointerException。- 参数:
resolver- XPath 函数解析器。- 抛出:
NullPointerException- 如果resolver是null。
-
getXPathFunctionResolver
XPathFunctionResolver getXPathFunctionResolver()返回当前函数解析器。null在没有函数解析器生效时返回。- 返回:
- 当前功能解析器。
-
setNamespaceContext
建立命名空间上下文。如果
nsContext是null则抛出NullPointerException。- 参数:
nsContext- 要使用的命名空间上下文。- 抛出:
NullPointerException- 如果nsContext是null。
-
getNamespaceContext
NamespaceContext getNamespaceContext()返回当前命名空间上下文。null在没有有效的命名空间上下文中返回。- 返回:
- 当前命名空间上下文。
-
compile
编译 XPath 表达式以供以后评估。如果
expression包含任何XPathFunction,则它们必须通过XPathFunctionResolver可用。如果XPathFunction不能用XPathFunctionResolver解决,将抛出XPathExpressionException。如果
expression包含任何变量,则XPathVariableResolver实际上 at compile time 将用于解析它们。- 参数:
expression- XPath 表达式。- 返回:
- 已编译的 XPath 表达式。
- 抛出:
XPathExpressionException- 如果无法编译expression。NullPointerException- 如果expression是null。
-
evaluate
在指定上下文中计算XPath表达式并将结果作为指定类型返回。有关上下文项评估、变量、函数和
QName解析和返回类型转换的信息,请参见 XPath 表达式的评估。参数
item代表 XPath 表达式将被操作的上下文。上下文的类型是依赖于实现的。如果值为null,则操作必须不依赖于上下文,否则将抛出 XPathExpressionException。- 实现注意事项:
-
上下文的类型通常是
Node。 - 参数:
expression- XPath 表达式。item- 将在其中计算 XPath 表达式的上下文。returnType- XPath 表达式预期返回的结果类型。- 返回:
-
将 XPath 表达式计算为
returnType的Object的结果。 - 抛出:
XPathExpressionException- 如果无法评估expression。IllegalArgumentException- 如果returnType不是XPathConstants中定义的类型之一(NUMBER、STRING、BOOLEAN、NODE或NODESET)。NullPointerException- 如果expression or returnType是null。
-
evaluate
在指定上下文中计算 XPath 表达式并将结果作为String返回。此方法使用
XPathConstants.STRING的returnType调用evaluate(String expression, Object item, QName returnType)。有关上下文项评估、变量、函数和 QName 解析以及返回类型转换,请参阅 XPath 表达式的评估。
参数
item代表 XPath 表达式将被操作的上下文。上下文的类型是依赖于实现的。如果值为null,则操作必须不依赖于上下文,否则将抛出 XPathExpressionException。- 实现注意事项:
-
上下文的类型通常是
Node。 - 参数:
expression- XPath 表达式。item- 将在其中计算 XPath 表达式的上下文。- 返回:
-
将 XPath 表达式计算为
String的结果。 - 抛出:
XPathExpressionException- 如果无法评估expression。NullPointerException- 如果expression是null。
-
evaluate
Object evaluate(String expression, InputSource source, QName returnType) throws XPathExpressionException 在指定InputSource的上下文中计算 XPath 表达式,并将结果作为指定类型返回。此方法为
InputSource构建数据模型并在生成的文档对象上调用evaluate(String expression, Object item, QName returnType)。有关上下文项评估、变量、函数和 QName 解析以及返回类型转换,请参阅 XPath 表达式的评估。
- 参数:
expression- XPath 表达式。source- 要评估的文档的输入源。returnType- 所需的返回类型。- 返回:
-
封装表达式计算结果的
Object。 - 抛出:
XPathExpressionException- 如果无法计算表达式。IllegalArgumentException- 如果returnType不是XPathConstants中定义的类型之一。NullPointerException- 如果expression, source or returnType是null。
-
evaluate
在指定的InputSource上下文中计算 XPath 表达式并将结果作为String返回。此方法使用
XPathConstants.STRING的returnType调用evaluate(String expression, InputSource source, QName returnType)。有关上下文项评估、变量、函数和 QName 解析以及返回类型转换,请参阅 XPath 表达式的评估。
- 参数:
expression- XPath 表达式。source- 要评估的文档的InputSource。- 返回:
String是计算表达式并将结果转换为String的结果。- 抛出:
XPathExpressionException- 如果无法计算表达式。NullPointerException- 如果expression or source是null。
-
evaluateExpression
default <T> T evaluateExpression(String expression, Object item, Class <T> type) throws XPathExpressionException 在指定的上下文中计算 XPath 表达式并返回具有通过class type指定的类型的结果参数
item代表 XPath 表达式将被操作的上下文。上下文的类型是依赖于实现的。如果值为null,则操作必须不依赖于上下文,否则将抛出 XPathExpressionException。- 实现要求:
-
XPath API 中的默认实现等效于:
由于(T)evaluate(expression, item, XPathEvaluationResult.XPathResultType.getQNameType(type));evaluate方法不支持ANY类型,因此将 XPathEvaluationResult 指定为类型将导致 IllegalArgumentException。任何支持ANY类型的实现都必须覆盖此方法。 - 实现注意事项:
-
上下文的类型通常是
Node。 - 类型参数:
T- XPath 表达式将返回的类类型。- 参数:
expression- XPath 表达式。item- 将在其中计算 XPath 表达式的上下文。type- XPath 表达式预期返回的类类型必须是包摘要中 3.2 类类型 部分中描述的类型之一。- 返回:
- 计算表达式的结果。
- 抛出:
XPathExpressionException- 如果无法计算表达式。IllegalArgumentException- 如果type不是与XPathEvaluationResult.XPathResultType中定义的类型相对应的类型,或者 XPathEvaluationResult 被指定为该类型但支持ANY类型的实现不可用。NullPointerException- 如果expression or type是null。- 自从:
- 9
-
evaluateExpression
default XPathEvaluationResult <?> evaluateExpression(String expression, Object item) throws XPathExpressionException 在指定上下文中计算 XPath 表达式。这相当于调用类型为XPathEvaluationResult的evaluateExpression(String expression, Object item, Class type):evaluateExpression(expression, item, XPathEvaluationResult.class);参数
item代表 XPath 表达式将被操作的上下文。上下文的类型是依赖于实现的。如果值为null,则操作必须不依赖于上下文,否则将抛出 XPathExpressionException。- 实现要求:
-
XPath API 中的默认实现等效于:
由于evaluateExpression(expression, item, XPathEvaluationResult.class);evaluate方法不支持ANY类型,因此此方法的默认实现将始终抛出 IllegalArgumentException。因此,任何支持ANY类型的实现都必须覆盖此方法。 - 实现注意事项:
-
上下文的类型通常是
Node。 - 参数:
expression- XPath 表达式。item- 将在其中计算 XPath 表达式的上下文。- 返回:
- 计算表达式的结果。
- 抛出:
XPathExpressionException- 如果无法计算表达式。IllegalArgumentException- 如果此方法的实现不支持ANY类型。NullPointerException- 如果expression是null。- 自从:
- 9
-
evaluateExpression
default <T> T evaluateExpression(String expression, InputSource source, Class <T> type) throws XPathExpressionException 在指定的source的上下文中计算 XPath 表达式并返回指定的结果。此方法为
InputSource构建数据模型并在生成的文档对象上调用evaluateExpression(String expression, Object item, Class type)。数据模型通常是Document- 实现要求:
-
XPath API 中的默认实现等效于:
由于(T)evaluate(expression, source, XPathEvaluationResult.XPathResultType.getQNameType(type));evaluate方法不支持ANY类型,因此将 XPathEvaluationResult 指定为类型将导致 IllegalArgumentException。任何支持ANY类型的实现都必须覆盖此方法。 - 类型参数:
T- XPath 表达式将返回的类类型。- 参数:
expression- XPath 表达式。source- 要评估的文档的输入源。type- XPath 表达式预期返回的类类型必须是包摘要中 3.2 类类型 部分中描述的类型之一。- 返回:
- 计算表达式的结果。
- 抛出:
XPathExpressionException- 如果无法计算表达式。IllegalArgumentException- 如果type不是与XPathResultType中定义的类型相对应的类型,或者 XPathEvaluationResult 被指定为该类型但支持ANY类型的实现不可用。NullPointerException- 如果expression, source or type是null。- 自从:
- 9
-
evaluateExpression
default XPathEvaluationResult <?> evaluateExpression(String expression, InputSource source) throws XPathExpressionException 在指定上下文中计算 XPath 表达式。这相当于调用类型为XPathEvaluationResult的evaluateExpression(String expression, Object item, Class type):evaluateExpression(expression, item, XPathEvaluationResult.class);- 实现要求:
-
XPath API 中的默认实现等效于:
由于evaluateExpression(expression, source, XPathEvaluationResult.class);evaluate方法不支持ANY类型,因此此方法的默认实现将始终抛出 IllegalArgumentException。因此,任何支持ANY类型的实现都必须覆盖此方法。 - 参数:
expression- XPath 表达式。source- 要评估的文档的输入源。- 返回:
- 计算表达式的结果。
- 抛出:
XPathExpressionException- 如果无法计算表达式。IllegalArgumentException- 如果此方法的实现不支持ANY类型。NullPointerException- 如果expression or source是null。- 自从:
- 9
-