VTD-XML xpath with!=不再有效

时间:2017-05-23 10:34:11

标签: xml xpath vtd-xml

自从我们更新了库以来,我已经面临这个问题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表达式。

1 个答案:

答案 0 :(得分:0)

我将你的代码粘贴到我的eclipse编辑器中,我得到的答案是2 ..不是-1,因为你已经表明...

所以我可以说你没有得到最新版本,即2.13.1。

请您访问vtd-xml网站并获取版本。

https://sourceforge.net/projects/vtd-xml/files/vtd-xml/ximpleware_2.13_2/ximpleware-2.13.2-java.zip/download

编辑:请转到cvs repo并下载这个parser.java文件......这是我修复的地方...确保你有... ...

http://vtd-xml.cvs.sourceforge.net/viewvc/vtd-xml/ximple-dev/com/ximpleware/xpath/parser.java?revision=1.33

编辑:我已经发布了这个版本2.13_2的修复程序,它今天就出来了。

相关问题