XPath, следующий-родной с несколькими условиями - PullRequest
2 голосов
/ 01 августа 2011

У меня есть следующий XML-документ.Я пытаюсь выбрать любого ребенка, у которого есть брат или сестра с тем же значением 2 и значение 3 не закрыто.

<root>
  <child>
    <value1>Type A</value1>
    <value2>Class 1</value2>
    <value3>Active</value3>
  </child>
  <child>
    <value1>Type B</value1>
    <value2>Class 1</value2>
    <value3>Closed</value3>
  </child>
  <child>
    <value1>Type C</value1>
    <value2>Class 2</value2>
    <value3>Active</value3>
  </child>
  <child>
    <value1>Type D</value1>
    <value2>Class 2</value2>
    <value3>Active</value3>
  </child>
  <child>
    <value1>Type E</value1>
    <value2>Class 3</value2>
    <value3>Active</value3>
  </child>
</root>

Моя попытка:

// child [follow-sibling :: child / value2 = value2 и value3! = 'Closed']

, но это не приводит к желаемому результату применения нескольких условий к функции следующего родственного элемента.

Есть идеи?

1 Ответ

6 голосов
/ 01 августа 2011
//child[value2 = following-sibling::child[not(value3 = 'Closed')]/value2]

Чтобы применить к любому брату, объедините оси following-sibling и preceding-sibling.

//child[value2 = (following-sibling::child | preceding-sibling::child)[not(value3 = 'Closed')]/value2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...