使用XPath获取XML节点的兄弟

时间:2013-03-13 16:12:05

标签: java xpath

我有以下XML

    <field label="mapping">
       <tuple> <atom label="A"/> <atom label="X"/> </tuple>
       <tuple> <atom label="B"/> <atom label="Y"/> </tuple>
       <tuple> <atom label="C"/> <atom label="Z"/> </tuple>
    </field>

当我知道另一个atom的标签时,我想从tuple中选择第二个atom节点的标签。

例如,如果我知道带有标签A的atom,我想获得带有标签X的原子。

我编写了这个XPath表达式,但它没有做到这一点:

//following-sibling::field[@label = 'mapping']/tuple/atom[@label = 'A']

如果我写

XPath expr = xpath.compile("//following-sibling::field[@label = 'mapping']/tuple/atom[@label = 'A']");
NodeList nodes = ((NodeList) expr.evaluate(doc, XPathConstants.NODESET));
for (int j=0;j<nodes.getLength();j++){
    String label = nodes.item(j).getAttributes().getNamedItem("label").getNodeValue();
}

变量label是A,当我期望它是X时。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你的following-sibling轴位置错误,但是接近:

//field[@label = 'mapping']/tuple/atom[@label = 'A']/following-sibling::atom