我正在使用 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/