xpath для оценки нескольких значений элементов - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть XML, как показано ниже:

<Accounts>
   <Account>
    <AccountNumber>12345</AccountNumber>
    <Status>NEW</Status>
   </Account>
   <Account>
    <AccountNumber>12346</AccountNumber>
    <Status>NEW</Status>
  </Account>
  <Account>
   <AccountNumber>12347</AccountNumber>
   <Status>NEW</Status>
 </Account>
</Accounts>

Мне нужен xpath, чтобы проверить, является ли все значение элемента «Status» «NEW», тогда выражение xpath должно возвращать значение «истина», иначе оно должно возвращать «ложь».

Я написал xpath '// * / Status / text () =' NEW '' для достижения этого. Но это всегда возвращает true, даже если значение «Status» отличается от «NEW».

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Попробуйте это: not(//Status[. != 'NEW''])

0 голосов
/ 24 апреля 2018

Ваш XPath,

//*/Status/text() = 'NEW'' 

терпит неудачу, потому что он проверяет существование, а не универсальность.

Вместо этого используйте одно из следующих действий, в зависимости от особенностей ваших требований:

  • Все Account s должны иметь Status и должны быть <Status>NEW</Status>:

    not(//Account[not(Status='NEW')])
    
  • Любые Account s, которые имеютStatus должно иметь значение <Status>NEW</Status>:

    not(//Account[Status!='NEW'])
    
0 голосов
/ 24 апреля 2018

Может быть достаточно проверить, есть ли <Status>, где text() равно и не равно для "NEW".Как то так:

/Accounts/Account[Status/text()!="NEW"]
...