java - 从java中的xpath表达式中提取所有变量引用的最安全方法

标签 java xpath saxon xpath-2.0

我正在使用 java 和 saxon 处理器。

假设我有一些 XPath 表达式,其中可能包含变量引用。我还有一些自定义 xpath 函数,它们可以嵌套到任意深度,可以将变量引用作为参数。所以xpath表达式相当复杂。

我想提取 xpath 表达式中每个变量引用的前缀和本地名称,而不对其进行评估。

我可以通过为我的 xpath 设置一些自定义 XPathVariableResolver 并对其进行评估来提取它。但这可能会产生相当大的开销,因为我只想提取变量引用,而不是调用可能耗时的自定义函数。

仅通过一些与“$”符号匹配的模式来做到这一点是否安全? 也许对此进行一些 API 调用会很棒。或者,如果没有可用的 API 调用,那么我应该避免使用“$”符号(可能它可以作为字符串定位,我需要避免采用这种情况)。

最佳答案

使用s9api XPathCompiler类编译表达式:

XPathCompiler c = new Processor(false).newXPathCompiler();
c.setAllowUndeclaredVariables(true);
XPathExecutable exp = c.compile(xpathExpression);

然后可以通过调用以下方式使用表达式中的外部变量:

exp.iterateExternalVariables();

顺便说一句,撒克逊问题是否在这里被注意到是偶然的。如果您想确定答案,请使用 Saxon 论坛 http://saxonica.plan.io/

关于java - 从java中的xpath表达式中提取所有变量引用的最安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13550673/

相关文章:

Java XPath - 限制范围 - Saxon s9api

scala - lift-json XPath\\operator 根据 num 匹配有不同的返回类型

java - 将特殊变量 (~ 波形符) 传递给 Java 程序

java - 在子类的方法中本地调用父类(super class)方法时使用 "super"关键字或使用父类(super class)实例?

java - Webflux + Webclient + Netty,如何使用带有多个客户端证书的SslContext?

php - XPath 查询有时不显示正确的元素

xml - 选择 xslt 模板中更高级别元素的值

xslt - <xsl :number> 的自定义格式

xpath - 如何在 Saxon 中使用 XPath 3.1?

java - Scanner 的 nextLine() 方法如何在按返回键时停止执行?