我有一个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
标记。
答案 0 :(得分: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表达式......
答案 1 :(得分:2)
最初的段落似乎表明你想要这个:
//test/bla
然而,结尾段似乎表明你想要不同的东西。
答案 2 :(得分: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);
}
答案 3 :(得分:1)
对于正在学习VTD-XML的人来说,VTD开发人员自己编写的文章http://www.codeproject.com/Articles/28237/Programming-XPath-with-VTD-XML非常出色。
没有找到这个主页,但它有很多启动。