的Java如何使用XPath
提取完整的XML块我的XML文件是这样的:的Java如何使用XPath
<A>
<B>
<C>
<id>0</id>
</C>
</B>
<B>
<C>
<id>1</id>
</C>
</B>
</A>
而且我想获得B地块,当C具有特定的ID。例如,如果我想获得ID = 1块,我想这个的回复:
<B>
<C>
<id>1</id>
</C>
</B>
但我不知道我能得到我想要的一部分。我试过了:
Node result = (Node)xPath.evaluate("A/B/C[id = '1']", doc, XPathConstants.NODE);
但是,当我想要B块时返回一个C块。
和:
Node result = (Node)xPath.evaluate("B[A/B/C[id = '1']]", doc, XPathConstants.NODE);
返回null。
而且我已阅读官方文档,但我没有发现任何东西:
https://msdn.microsoft.com/en-us/library/ms256471(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx
感谢。
谓词仅仅意味着“只保留这个元素,如果尊重我把这个谓词条件”
那么简单,
A/B[C/id = 1]
它的工作原理!谢谢! –
你可以做到这一点通过使用父轴在XPath查询。正如你所提到的,当C有一个特定的id时,你想获得B block。 您有父查询轴就像
// * [ID = “1”] /父:: B
这里是命令的细节秒。
// *是直到xpath找到id的嵌套路径。
[id =“1”]是根据您的要求条件。
/父:: B将从ID标签返回的父母节点到B标签,包括B.
我希望这会为你工作。
Node result = ((Node)xPath.evaluate("A/B/C[id = '1']", doc, XPathConstants.NODE))
.getParent();
这与Java方法的溶液中,得到一个C元件,然后取它的父
谢谢!有用 –
这是代码,以提取与VTD-XML的文本块..和XPath。关键是使用getElementFragment,它返回源XML文档中片段的偏移量和长度。
public static void main(String[] args) throws VTDException{
String xml="<A>"+
"<B>\n"+
"<C>\n"+
"<id>0</id>\n"+
"</C>\n"+
"</B>\n"+
"<B>\n"+
"<C>\n"+
"<id>1</id>\n"+
"</C>\n"+
"</B>\n"+
"</A>\n";
VTDGen vg = new VTDGen();
vg.setDoc(xml.getBytes());
vg.parse(false);
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("/A/B[C/id='1']");
System.out.println("====>"+ap.getExprString());
int i=0,count=0;
System.out.println(" token count ====> "+ vn.getTokenCount());
while((i=ap.evalXPath())!=-1){
long l = vn.getElementFragment();
System.out.println("fragment content ====>"+
new String(vn.getXML().getBytes(),(int)l,(int)(l>>32)));
}
System.out.println(" count ===> "+count);
}
做'result.getParent()'第一次尝试,它会给你你想要的C的B;) – azro
谢谢!它也可以工作 –
我已将它添加到答案中,如果需要,可以接受它 – azro