自从我们更新了库以来,我已经面临这个问题2天了。我们有很多这种xpath:
/root/temp[@attr!='abcd']
这些因为我们将库更新到2.13而不再起作用了。这些在2.11版本中运行良好,但它们不再适用于> = 2.12版本。这个问题很容易重现:
String test = "<root><attr temp='abcde'></attr></root>";
VTDGen vg = new VTDGen();
vg.setDoc(test.getBytes());
vg.parse(false);
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("/root/attr[@temp!='abcd']");
System.out.println(ap.evalXPath());//expecting a positive int, get -1 instead
我们因为另一个错误而更新了,但现在我们真的被这个困住了。有任何想法吗?我们可以用另一种语法来绕过这个错误吗?我们尝试使用/root/attr[not(@temp='abcd')]
并且正在处理这个简单的情况,但是我们不确定这对于涉及“!=”as运算符的每个xpath都有效。
请注意,即使使用类似/root/attr[@temp!='']
的xpath,2.11也能正常工作,在该版本之后,似乎!=
运算符已损坏,至少对于我们习惯使用的情况而言。
修改 我们不使用“not”语法的原因是因为像这样
<root>
<nodes>
<node attr="1" />
<node attr="2" />
<node attr="3" />
</nodes>
<nodi>
<nodo attr="1" />
<nodo attr="2" />
<nodo attr="3" />
</nodi>
</root>
这些xpath:
/根/节点/对节点[@attr!= /根/ nodi / nodo / @ ATTR]
/根/节点/对节点[否(@ ATTR = /根/ nodi / nodo / @ ATTR)]
返回不同的结果。我知道这是一个非常简单的例子,只是我们无法确定所有通过简单的查找和替换保持按预期工作。我刚刚进入源代码,我注意到解析器只是简单地切了!超出xpath表达式。
答案 0 :(得分:0)
我将你的代码粘贴到我的eclipse编辑器中,我得到的答案是2 ..不是-1,因为你已经表明...
所以我可以说你没有得到最新版本,即2.13.1。
请您访问vtd-xml网站并获取版本。
编辑:请转到cvs repo并下载这个parser.java文件......这是我修复的地方...确保你有... ...
编辑:我已经发布了这个版本2.13_2的修复程序,它今天就出来了。