Выражение XPath для проверки значений атрибутов в нескольких дочерних узлах - PullRequest
3 голосов
/ 07 марта 2012

Учитывая приведенный ниже XML, я ищу запрос XPath для ответа на следующий вопрос:

Содержит ли список языков, описанный в приведенном выше XML, все эти языки: "английский", "французский" и "норвежский"?

Другими словами, есть ли способ узнать, содержит ли узел "Сущности" данный набор языков? Ответ будет ИСТИННЫМ для "английского", "французского" и "норвежского", но ЛОЖНЫ для "арабского", "английского", "французского" и "норвежского".

<Document>
  <Entities>
    <Entity Name="Afrikaans" Id="2000" Type="Language"/>
    <Entity Name="Dansk" Id="2002" Type="Language"/>
    <Entity Name="Deutsch" Id="2003" Type="Language"/>
    <Entity Name="English" Id="2005" Type="Language"/>
    <Entity Name="Español" Id="2006" Type="Language"/>
    <Entity Name="French" Id="2007" Type="Language"/>
    <Entity Name="Indonesian" Id="2010" Type="Language"/>
    <Entity Name="Italiano" Id="2012" Type="Language"/>
    <Entity Name="Norwegian" Id="2018" Type="Language"/>
  </Entities>
</Document>

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Если вы используете XPath 2.0, функция exists() возвращает true или false ...

exists(/*/Entities[*/@Name='English' and */@Name='French' and */@Name='Norwegian'])
0 голосов
/ 07 марта 2012

В XPath 1.0 используйте :

  /*/*/Entity/@Name = 'English'
and
  /*/*/Entity/@Name = 'French'
and
  /*/*/Entity/@Name = 'Norwegian'

В XPath 2.0 используйте :

 every $lang in ('English', 'French', 'Norwegian')
   satisfies
       $lang = /*/*/Entity/@Name
0 голосов
/ 07 марта 2012

Это XPath

/Document/Entities/Entity[@Name='Norwegian'] and /Document/Entities/Entity[@Name='French'] and /Document/Entities/Entity[@Name='English']

будет true, если есть все три языка, и false в противном случае

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