在下面的第二个示例中,为什么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
答案 0 :(得分:0)
我在最新版本上尝试了这个...并且都返回1.45 ...
这似乎是2.12中引入并随后报告和修复的错误之一。引入它的原因是因为2.12旨在完全支持混合内容类型的XPath评估...也就是说,如果你将xpath“/ xmlDoc”评估为字符串,它将返回junk1.45 ..
另外,这个bug只涉及evalXPathToString ...而不是其他三种评估方法......我相信/ xmlDoc / valss / text()将是一种解决方法......
如果您不想等待2.13的正式发布以修改此问题..您可以下载该文件并使用以下步骤自行构建一个jar ...
获取补丁...转到vtd-xml的cvs主机站点... http://vtd-xml.cvs.sourceforge.net/viewvc/vtd-xml/ximple-dev/com/ximpleware/LocationPathExpr.java
将文件放在com.ximpleware
在Windows上运行build.bat ...或者在你的unix机器上运行相同的东西
获取新的jar文件并替换类路径中的旧2.12 jar ...
让我知道它是否适合你...