3

我有一个像这样的xml文件

<root>
 <test>
  <bla>test1</bla>
 </test>
 <test>
  <bla>test2</bla>
 </test>
 <test>
 </test>
</root>

现在我想通过使用 XPath 表达式使用 vtd-xml-parser 来解析它。首先我搜索test标签

VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("//test");

现在我想在这个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

4

4 回答 4

3

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

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 表达式......

于 2009-11-19T21:34:56.003 回答
2

最初的段落似乎表明你想要这个:

//test/bla

但是,结尾段落似乎表明您想要不同的东西。

于 2009-11-19T12:15:00.370 回答
1

对于正在学习 VTD-XML 的人来说,这里有一篇很好的如何编程文章http://www.codeproject.com/Articles/28237/Programming-XPath-with-VTD-XML 由 VTD 开发人员自己编写。

没有找到这个主页,但它对启动有很大帮助。

于 2013-01-02T15:55:42.843 回答
1

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

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);
}
于 2010-08-13T08:28:19.097 回答