Xml 意外的节点记录器行为

Xml 意外的节点记录器行为,xml,vtd-xml,Xml,Vtd Xml,给定以下XML文档: 20031234-1 2003-01-23 438.50 微型设备账单 BM BMic 我发出一个XPath来导航到节点,然后我想发出第二个XPath来获取所有节点,并记录它们的位置 出于某种原因,NodeRecorder.iterate()会立即返回-1,即使节点被正确记录,我还是调用了resetPointer(),并向前移动。我有其他使用这种逻辑的文档(但是不同的XPath),它们都是有效的,但这一个不是。有什么想法吗 演示代码: File f=新文件(“noder

给定以下XML文档:


20031234-1
2003-01-23
438.50
微型设备账单
BM
BMic
我发出一个XPath来导航到
节点,然后我想发出第二个XPath来获取所有
节点,并记录它们的位置

出于某种原因,
NodeRecorder.iterate()
会立即返回-1,即使节点被正确记录,我还是调用了
resetPointer()
,并向前移动。我有其他使用这种逻辑的文档(但是不同的XPath),它们都是有效的,但这一个不是。有什么想法吗

演示代码:

File f=新文件(“noderecorder.xml”);
FileInputStream fis=新的FileInputStream(f);
字节[]b=新字节[(int)f.length()];
财政司司长(b);
fis.close();
VTDGen vg=新VTDGen();
vg.setDoc(b);
解析(false);
VTDNav vn=vg.getNav();
自动驾驶仪partyNameXPath=新自动驾驶仪(vn);
partyNameXPath.selectXPath(“largeMessage/BuyerParty/Party/PartyName”);
//查找PartyName
while(partyNameXPath.evalXPath()!=-1){
System.out.println(“找到:”+vn.getCurrentIndex()+”+
toRawString(vn.getCurrentIndex());
节点记录器编号=新节点记录器(vn);
//找到所有的名字并记录他们的位置
自动驾驶仪名称XPath=新自动驾驶仪(vn);
选择XPath(“名称”);
while(nameXPath.evalXPath()!=-1){
System.out.println(“找到:+vn.getCurrentIndex()+”)+
toRawString(vn.getCurrentIndex());
记录编号();
}
重置指针()号;
System.out.println(“nr.iterate之前的索引:+vn.getCurrentIndex());
//做一些其他的工作。。。
//现在去迭代我们记录的节点
while(n.iterate()!=-1){
System.out.println(“重新找到:+vn.getCurrentIndex()+”+
toRawString(vn.getCurrentIndex());
}
System.out.println(“nr.iterate之后的索引:”+
getCurrentIndex());
}
输出:

Found: 19 PartyName
Found: 20 Name
Found: 22 Name
Found: 24 Name
Index before nr.iterate: 19
Index after nr.iterate: -1
Found: 6 PartyName
Found: 7 Name
Found: 9 Name
Found: 11 Name
Index before nr.iterate: 6
Re-found: 7 Name
Re-found: 9 Name
Re-found: 11 Name
Index after nr.iterate: 11
编辑:刚刚尝试了一个嵌套较少的修改文档,而这一个有效(将partyNameXPath更改为“PartyName”),问题似乎与深度有关:


微型设备账单
BM
BMic
输出:

Found: 19 PartyName
Found: 20 Name
Found: 22 Name
Found: 24 Name
Index before nr.iterate: 19
Index after nr.iterate: -1
Found: 6 PartyName
Found: 7 Name
Found: 9 Name
Found: 11 Name
Index before nr.iterate: 6
Re-found: 7 Name
Re-found: 9 Name
Re-found: 11 Name
Index after nr.iterate: 11

这是一个刚刚修复的错误。谢谢你的报道。你能从CVS中查看NodeRecorder.java并再试一次吗?

好的,我会调查一下。谢谢你的快速回复,我抓到了更新后的NodeRecorder.java,但我仍然看到上面发布的示例中有奇怪的行为。使用新的NodeRecorder,我得到:
Found:19 PartyName Found:20 Name Found:22 Name Found:24 nr之前的名称索引。迭代:19 Re Found:0 Re Found:5 InlinePurchaseOrder Re Found:0 Re Found:5 InlinePurchaseOrder索引。迭代:5
第二次修复已检入。你能再试一次吗?谢谢该修复程序似乎已经完成了,我现在在这两种情况下都获得了预期的结果,谢谢!当前是否有包含此修复程序的版本2.12的预期发布日期?