Java VTD-XML XPath正在跳过前3条记录
我正在使用VTD-XML将一个大的XML文件拆分为更小的XML文件。一切都很好,请接受:Java VTD-XML XPath正在跳过前3条记录,java,xpath,vtd-xml,Java,Xpath,Vtd Xml,我正在使用VTD-XML将一个大的XML文件拆分为更小的XML文件。一切都很好,请接受: autoPilot.selectXPath(“//节点名”) 由于某种原因,它跳过了前3个节点 编辑:VTDXML作者指出,LOG.info(“xpath已找到”+ap.evalXPath()+“项”)不返回计数,但返回节点索引 新的拆分xml文件缺少原始文件的前三个节点 下面是基本的XML布局。我无法显示真正的xml数据,但它看起来是这样的: <rootNode> <
autoPilot.selectXPath(“//节点名”)
由于某种原因,它跳过了前3个节点
编辑:VTDXML作者指出,LOG.info(“xpath已找到”+ap.evalXPath()+“项”)代码>不返回计数,但返回节点索引
新的拆分xml文件缺少原始文件的前三个节点
下面是基本的XML布局。我无法显示真正的xml数据,但它看起来是这样的:
<rootNode>
<parentNode>
<contentNode>..children inside...</contentNode>
<contentNode>..children inside...</contentNode>
<contentNode>..children inside...</contentNode>
<contentNode>..children inside...</contentNode>
</parentNode>
</rootNode>
编辑:添加到while循环的计数器。正如vtd xml作者所建议的那样,我将计数器添加到while循环
while((i=ap.evalXPath())!=-1){
// if filesize is at max create a new File
if(fos.getChannel().size() > maxFileSize){
finishXml(fos,contentNode);
LOG.info("Finished file with " + k + "nodes");
fos = getNewXml(contentNode);
k=0;
}
k++;
long l = vn.getElementFragment();
fos.write(ba, (int)l, (int)(l>>32));
fos.write("\n".getBytes());
}
我第一次运行它时,输出只缺少一条记录。然后,我删除了输出xml文件和文件夹,并在拆分器中重新运行它。这一次,它在日志中返回了正确的编号,并正确地分割了文件。我在删除创建的文件夹和文件时重复了多次该过程,也没有删除文件。我每次都得到相同的正确结果。我猜IDE或其他东西没有正确刷新 正如vtdxml作者所建议的那样,我将计数器添加到while循环中
while((i=ap.evalXPath())!=-1){
// if filesize is at max create a new File
if(fos.getChannel().size() > maxFileSize){
finishXml(fos,contentNode);
LOG.info("Finished file with " + k + "nodes");
fos = getNewXml(contentNode);
k=0;
}
k++;
long l = vn.getElementFragment();
fos.write(ba, (int)l, (int)(l>>32));
fos.write("\n".getBytes());
}
我第一次运行它时,输出只缺少一条记录。然后,我删除了输出xml文件和文件夹,并在拆分器中重新运行它。这一次,它在日志中返回了正确的编号,并正确地分割了文件。我在删除创建的文件夹和文件时重复了多次该过程,也没有删除文件。我每次都得到相同的正确结果。我猜IDE或其他东西没有正确刷新 您可以发布完整的xml吗?我没有看到其中的12个节点..我无法发布实际的XML文件,因为这将违反HIPPA。我可以向您保证,xml的这一部分中有12个节点,我在哪里可以找到这些信息。我在一两个月前发现了这个问题。@vtd xml作者去获取了最新版本,但仍然存在问题。此语句:LOG.info(“xpath已找到”+ap.evalXPath()+“items”);不会告诉您xpath求值结果中有多少项,如果第一项的节点索引值不为零,则只会告诉第一项的节点索引值,因此已经有问题了。您可以发布完整的xml吗?我没有看到其中的12个节点..我无法发布实际的XML文件,因为这将违反HIPPA。我可以向您保证,xml的这一部分中有12个节点,我在哪里可以找到这些信息。我在一两个月前发现了这个问题。@vtd xml作者去获取了最新版本,但仍然存在问题。此语句:LOG.info(“xpath已找到”+ap.evalXPath()+“items”);不会告诉您xpath求值结果中有多少项,它只会告诉第一项的节点索引值(如果不是零),因此已经有问题了