Java VTD XML内部XPath表达式

Java VTD XML内部XPath表达式,java,xml,xpath,vtd-xml,Java,Xml,Xpath,Vtd Xml,例如,我有一个xml文件,如下所示 <root> <test> <bla>test1</bla> </test> <test> <bla>test2</bla> </test> <test> </test> </root> 现在我想在这个test标签中搜索bla标签 int result = -1; int count = 0;

例如,我有一个xml文件,如下所示

<root>
 <test>
  <bla>test1</bla>
 </test>
 <test>
  <bla>test2</bla>
 </test>
 <test>
 </test>
</root>
现在我想在这个
test
标签中搜索
bla
标签

int result = -1;
int count = 0;

while ((result = ap.evalXPath()) != -1) {
 // evaluate XPath Expressions within the test tags
}

有人能告诉我怎么表达吗?我不想在整个文档中搜索
bla
标记,因为我希望能够将
bla
标记分配给
test
标记。例如,如果
bla
标记为空,并且我在整个文档中搜索
bla
标记,则我无法执行此操作。

最初的段落似乎表明您需要:

//test/bla

然而,结尾的段落似乎表明您想要一些不同的东西。

您可以声明另一个自动驾驶仪(如下所示),尽管它并不总是最简单的方式

AutoPilot ap2 = new AutoPilot(); ap2.selectXPath("blah");
然后将其嵌套在循环中

while ((result = ap.evalXPath()) != -1) {
 // evaluate XPath Expressions within the test tags
  int i2=-1;
  while((i2=ap2.evalXPath())!=-1){
     // do more stuff here
  }
}

但问题是第二个xpath需要是相对xpath表达式…

这里是使用两个xpath的替代方法。仅使用一个xpath获取“test”标记,然后使用循环遍历其子项以查找“bla”标记


对于学习VTD-XML的人来说,这里有一篇由VTD开发人员自己撰写的关于如何编程的优秀文章


在主页上找不到这个,但它对启动有很大帮助

这种方法会提高cpu周期方面的性能吗?嗨,别忘了使用nv.push和nv.pop来跟上当前光标的位置,这里有一个例子
while ((result = ap.evalXPath()) != -1) {
 // evaluate XPath Expressions within the test tags
  int i2=-1;
  while((i2=ap2.evalXPath())!=-1){
     // do more stuff here
  }
}
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("//test");

while (ap.evalXPath() != -1) {
    System.out.println("Inside Test tag");

    //now find the children called "bla"
    if(vn.toElement(VTDNav.FIRST_CHILD, "bla")){
    do{
        int val = vn.getText() ;
        if(val!=-1){
        String value = vn.toNormalizedString(val);
        System.out.println("\tFound bla: " + value);
        }
    }
    while(vn.toElement(VTDNav.NEXT_SIBLING, "bla"));
    }
    //move back to parent
    vn.toElement(VTDNav.PARENT);
}