评估-all-属性的Xpath?

时间:2010-06-07 22:52:01

标签: xpath attributes

我可能会尝试在这里做一些无效的事情,但也许比我聪明的人知道解决我问题的正确语法。 给出:


    <group code="vehicle">
        <line code="car">
            <cell>
                <box code="price">1000.00</box>
            </cell>
        </line>
        <line code="car">
            <cell code="sports">
                <box code="price">500.00</box>
            </cell>
        </line>
    </group>
如果我使用//*[@code="vehicle"]//*[@code="car"]//*[@code="price"],我将返回两个框(1000.00和500.00) - 正如所料,但不是我想要的。

是否有一个xpath语法将针对具有@code属性的所有节点进行评估,而不是如果它与最终结果不匹配则跳过它,因为我只返回第一个盒子(价格1000.00)?就像问一样,选择带@code的第一个节点,@ code必须等于“vehicle”,然后用@code选择下一个节点,@code必须等于“car”,然后用@code和@code选择下一个节点等于“价格”。

2 个答案:

答案 0 :(得分:1)

使用

   "//box
       [(@code='car' or @code='price' or @code='vehicle')
      and
       not(
             ancestor-or-self::*
                   [
                       @code
                      and
                       not(@code='car'
                              or
                               @code='price'
                              or
                               @code='vehicle'
                           )

                   ]
               )
       ]

答案 1 :(得分:-1)

不是xpath的专家,但XmlSpy似乎表明这会起作用吗?

(//*[@code="vehicle"]//*[@code="car"]//*[@code="price"])[1]