Xpath, который оценивает все атрибуты? - PullRequest
1 голос
/ 08 июня 2010

Возможно, я здесь пытаюсь сделать что-то недопустимое, но, может быть, кто-то умнее меня знает правильный синтаксис для решения моей проблемы. Дано:


    <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 ]

1 голос
/ 08 июня 2010

Использование :

   "//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'
                           )

                   ]
               )
       ]
0 голосов
/ 08 июня 2010

Не эксперт по xpath, но XmlSpy, кажется, указывает, что это будет работать?

(//*[@code="vehicle"]//*[@code="car"]//*[@code="price"])[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...