xpath在子栏之前出现子foo的所有节点

时间:2012-07-25 00:55:25

标签: xpath

<list>
    <head>Fruit</head>
    <type>Consumables</type>
    <item>Apple</item>
    <item>Banana</item>
    <item>Coffee</item>
<list>
<list>
    <head>Airports</head>
    <label>SFO</label>
    <item>San Francisco</item>
    <label>LHR</label>
    <item>London</item>
<list>

匹配在<list>之前出现<label>的所有<item>个节点。上面的第一个列表不匹配;第二个会。

我可以假设至少有一个<item>。它可能是唯一的孩子。

(XPath / XSLT 1.0)

2 个答案:

答案 0 :(得分:3)

使用

 /*/list[*[self::label or self::item][1][self::label]]

这可能比使用反向轴更有效,因为评估在list labelitem {{1}}的第一个找到的孩子处停止

答案 1 :(得分:0)

啊,我明白了。请勿查看label转发,并在访问item时停止。而是使用item转到第一个preceding-sibling并向后看

match="list[item[1]/preceding-sibling::label]"