【发布时间】:2014-08-28 23:57:06
【问题描述】:
当我尝试使用 VTD-XML 在 Java 中运行以下 xpath 表达式时,我收到了一个意外错误。
代码:
..
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("/a//b[text() = 'apple''banana']");
错误:
Syntax error after or around the end of ==> /a//b[text() = 'apple'
Caused by: com.ximpleware.XPathParseException: XPath Syntax error: #29
at com.ximpleware.xpath.parser.unrecovered_syntax_error(parser.java:492)
at java_cup.runtime.lr_parser.parse(lr_parser.java:601)
at com.ximpleware.AutoPilot.selectXPath(AutoPilot.java:809)
这不是错误吗?我的印象是在 XPath 2.0 中转义单引号是可以接受的?当我尝试在 XML Spy 中使用相同的文档运行 xpath 查询时,它运行良好。
【问题讨论】:
-
我通常建议将参数注入 XPath 表达式是使用 XPath 库提供的工具来设置变量,然后引用表达式中的变量 (
/a//b[. = $targetValue])。但是 VTD-XML 只允许您通过评估另一个 XPath 表达式来设置变量,这与我知道的所有其他 XPath 实现不同,它允许您直接注入 Java 字符串或数字作为变量的值。 -
我认为双引号前的反斜杠应该可以解决问题。