Xpath> Как я могу выбрать узел на основе его атрибутов и содержимого? - PullRequest
4 голосов
/ 08 июня 2010

Пример XML:

<assignments>
<assignment id="911990211" section-id="1942268885" item-count="21" sources="foo">
    <options>
        <value name="NumRetakes">4</value>
        <value name="MultipleResultGrading">6</value>
        <value name="MaxFeedbackAttempts">-1</value>
        <value name="ItemTakesBeforeHint">1</value>
        <value name="TimeAllowed">0</value>
    </options>
</assignment>
<assignment id="1425185257" section-id="1505958877" item-count="4" sources="bar">
    <options>
        <value name="NumRetakes">0</value>
        <value name="MultipleResultGrading">6</value>
        <value name="MaxFeedbackAttempts">3</value>
        <value name="ItemTakesBeforeHint">1</value>
        <value name="TimeAllowed">0</value>
    </options>
</assignment>
<assignments>

Используя XPath, я хотел бы выбрать все узлы присваиваний / назначений / опций / значений, в которых атрибут "name" для узлов равен "MaxFeedbackAttempts", а содержимое узлов - "1" .То есть я хочу вернуть каждый узел, который выглядит следующим образом:

<value name="MaxFeedbackAttempts">-1</value>

Я могу получить каждый узел назначений / назначений / опций / значений с указанным атрибутом, используя:

//assignment/options/value[@name="MaxFeedbackAttempts"]

Я просто не уверен, как уточнить этот путь, чтобы также ограничить результаты на основе содержимого узлов.Есть ли способ сделать это с помощью XPath?

Ответы [ 3 ]

5 голосов
/ 08 июня 2010
//assignment/options/value[@name="MaxFeedbackAttempts" and text()="-1"]
3 голосов
/ 08 июня 2010

Используйте

/ назначения / назначение / опции / значение [@ name = 'MaxFeedbackAttempts' и. = -1]

Старайтесь избегать сокращения // , поскольку его оценка может быть очень неэффективной.

3 голосов
/ 08 июня 2010

Вы можете использовать несколько ограничений [...] и, возможно, захотите запрос XPath, подобный этому:

//assignment/options/value[@name="MaxFeedbackAttempts"][text()="-1"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...