获取给定节点的所有前后兄弟

时间:2013-12-03 18:05:00

标签: xpath

我有以下XML代码段:

<root>
    <CharacteristicUse>
        <UseArea>Specification_Characteristics</UseArea>
        <Value>
            <ValueID>123</ValueID>
        </Value>
        <Value>
            <ValueID>444</ValueID>
        </Value>
        <Value>
            <ValueID>555</ValueID>
        </Value>
        <Value>
            <ValueID>777</ValueID>
        </Value>
        <Value>
            <ValueID>888</ValueID>
        </Value>
    </CharacteristicUse>
</root>

我希望能够获得Value节点的所有前后兄弟节点,其子节点ValueID为text = 555

我一直试图结合以下方式:

/root/CharacteristicUse/Value[ValueID='555']/following-sibling::* | preceding-sibling::*

但是,它只会让我回到下面的兄弟姐妹。 是否可以使用一个查询来获得输出:

<Value>
   <ValueID>123</ValueID>
</Value>
<Value>
   <ValueID>444</ValueID>
</Value>
<Value>
   <ValueID>777</ValueID>
</Value>
<Value>
<ValueID>888</ValueID>
</Value>

2 个答案:

答案 0 :(得分:1)

一种方式是蛮力:

/root/CharacteristicUse/Value[ValueID='555']/preceding-sibling::* | /root/CharacteristicUse/Value[ValueID='555']/following-sibling::*

这也包括“UseArea”节点,不确定是否需要它。

或者如果您想要的只是所有非特定值的值,那么

/root/CharacteristicUse/Value[not(ValueID='555')]

更直接。

答案 1 :(得分:0)

我找到了答案。 xpath看起来像:

/root/CharacteristicUse/Value[ValueID='555']/following-sibling::Value | /root/CharacteristicUse/Value[ValueID='555']/preceding-sibling::Value