vtd-xml evalXPathToString奇怪的行为/无法正常工作

时间:2016-06-01 10:02:42

标签: java xml xpath vtd-xml

在下面的第二个示例中,为什么evalXPathToString打印junk1.45而不仅仅是1.45

我使用的是vtd-xml版本2.12。

String xml = "<xmlDoc><noele>junk</noele><valss>1.45</valss></xmlDoc>";

VTDGen vtdGen = new VTDGen();
vtdGen.setDoc(xml.getBytes(StandardCharsets.UTF_8));
vtdGen.parse(true);
VTDNav vtdNav = vtdGen.getNav();

AutoPilot autoPilot = new AutoPilot(vtdNav);
autoPilot.selectXPath("/xmlDoc/valss");
System.out.println(autoPilot.evalXPathToNumber()); // prints 1.45

autoPilot = new AutoPilot(vtdNav);
autoPilot.selectXPath("/xmlDoc/valss");
System.out.println(autoPilot.evalXPathToString()); // prints junk1.45

1 个答案:

答案 0 :(得分:0)

我在最新版本上尝试了这个...并且都返回1.45 ...

这似乎是2.12中引入并随后报告和修复的错误之一。引入它的原因是因为2.12旨在完全支持混合内容类型的XPath评估...也就是说,如果你将xpath“/ xmlDoc”评估为字符串,它将返回junk1.45 ..

另外,这个bug只涉及evalXPathToString ...而不是其他三种评估方法......我相信/ xmlDoc / valss / text()将是一种解决方法......

如果您不想等待2.13的正式发布以修改此问题..您可以下载该文件并使用以下步骤自行构建一个jar ...

  1. 获取补丁...转到vtd-xml的cvs主机站点... http://vtd-xml.cvs.sourceforge.net/viewvc/vtd-xml/ximple-dev/com/ximpleware/LocationPathExpr.java

  2. 将文件放在com.ximpleware

  3. 在Windows上运行build.bat ...或者在你的unix机器上运行相同的东西

  4. 获取新的jar文件并替换类路径中的旧2.12 jar ...

  5. 让我知道它是否适合你...