Xpath路径帮助

时间:2010-07-09 10:21:17

标签: php xml xpath simplexml

我有以下XML:

<products>
    <product>       
        <name>Flat Panel Monitor</name>
        <code>LS123</code>
        <attributes>
            <attribute>
                <group>Color</group>
                <values>
                    <value>Red</value>
                    <value>Blue</value>
                    <value>Green</value>
                </values>
            </attribute>
            <attribute>
                <group>Warranty</group>
                <values>
                    <value>5 Year</value>
                </values>
            </attribute>
        </attributes>
    </product>
</products>

我将使用什么Xpath来获取具有组节点值“Color”的属性节点的所有值? /product/attributes/attribute/values/value的标准Xpath将返回所有值,包括保修组内的值,但我需要将它们分开。

我猜在伪代码中我所说的是得到所有“值”,其中父节点“值”是节点“group”的兄弟,其值为“Color” - 希望这是可能的吗?

感谢。

4 个答案:

答案 0 :(得分:4)

您需要使用方括号来过滤节点,因此: /product/attributes/attribute[group='Color']/values/value

答案 1 :(得分:3)

您只需要那些valuegroup'叔叔'Color的{​​{1}}个节点,所以请将其作为条件放在您已经解决的xpath上:

/product/attributes/attribute/values/value[../../group = 'Color']

这表示要使value节点有效,它必须有父节点,父节点的子节点值为Color

答案 2 :(得分:1)

又一个选择:

//value[ancestor::attribute[group='Color']]

答案 3 :(得分:0)

//values[preceding-sibling::group[text()="Color"]]/value