XPath-запрос, как получить значение одного атрибута на основе двух атрибутов - PullRequest
12 голосов
/ 06 октября 2010

Я хочу извлечь значение атрибута имени из следующего тега

<application
    comments="Do not erase this one"
    executable="run_CIET"
    icon="default"
    instances="1"
    mode="1"
    name="CIET"
    order="10"
    selection="1"
    tool="y"
/>

Я могу легко получить значение значения атрибута имени на основе значения режима, как показано ниже

xpath Applications.xml '//applications/application[@mode='3']'/@name

Но если я хочу добавить еще одно условие: «получить значение атрибута имени, когда mode = X, а атрибут инструмента отсутствует в теге приложения»

Как нам это сделать? Я пробовал что-то вроде

xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name

но он не работает.

Раньше я не использовал XPath, и я нахожу его хитрым. Я ищу справку по W3C в XPath, но не нашел того, что хотел. Пожалуйста, помогите.

Ответы [ 2 ]

17 голосов
/ 06 октября 2010
How do we do this? I tried something like 

    xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name

but its not working.



!@tool

- неверный синтаксис в XPath.Существует оператор !=, но нет оператора !.

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

//applications/application[@mode='3' and not(@tool)]/@name 

Есть две вещи, которые вы всегда должны избегать:

  1. с использованием оператора != - он имеет странное определение и не ведет себя как функция not() - никогда не используйте его, если один из операндов является набором узлов.

  2. Старайтесь как можно больше избегать, используя сокращение // - это может привести к значительной неэффективности, а также имеет аномальное поведение, которое не характерно для большинства людей.

5 голосов
/ 06 октября 2010

Использование not(@tool) вместо !@tool должно сделать эту работу. Если ваш движок XPath не работает, вы можете сделать count(@tool)=0, но в этом нет необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...