通过Java修改XPath表达式?

时间:2016-05-02 17:54:34

标签: java xml xpath

我有private类型的XPath表达式。我想将其转换为//*[@id='test-id' and @some-other-attribute='some-value’]

我似乎无法找到任何库函数来做到这一点。我不想求助于正则表达式查找和替换字符串 - 寻找一种结构化的方式来做到这一点。感谢任何指针。

注意:我不打算针对XML文件评估XPath表达式。我希望修改XPath表达式本身,而不需要使用字符串替换。

更新

按照kjhughes @provement,我得到以下代码来获取xpath表达式的解析树。

//*[@resourceId='android:id/test-id' and @some-other-attribute='some-value’]

这会产生:

Processor proc = new Processor(false);
XPathCompiler p = new XPathCompiler(proc);
XPathExecutable exec = p.compile("//*[@id='test-id' and @some-other-attribute='some-value']");
exec.getUnderlyingExpression().getInternalExpression().explain(new StandardLogger());

我唯一的选择是解析XML节点并重构表达式吗?或者我错过了一个更短的方式?

(我仍然需要弄清楚将XML转换回Xpath表达式是否微不足道,或者是否涉及任何欺骗。)

2 个答案:

答案 0 :(得分:0)

如果要以编程方式重写XPath表达式,则需要查看XPath解析器。有关示例,请参阅https://www.w3.org/2002/11/xquery-xpath-applets/xpathApplet.html

答案 1 :(得分:0)

以下是两个可用于解析XPath表达式的库:

  1. 撒克逊的net.sf.saxon.s9api.XPathCompiler。您可能还想在已编译的XPath上试验explain() interface
  2. The Jaxen XPath Engine for Java。但请注意,Jaxen的支持/稳定性为vacillated over time
  3. 如果有选择,我会针对Saxonica的图书馆进行开发。