2015-04-09 2 views
1

Новых в XPATH, я следующий XML:XPATH возвращения без дочерних тегов и дочерних тегов определенного значения

<lessons> 
    <lesson>blah</lesson> 
    <lesson>blah</lesson> 
    <lesson>blah</lesson> 
    <lesson> 
     <A>Yes</A> 
    </lesson> 
    <lesson> 
     <A>No</A> 
    </lesson> 
    <lesson> 
     <A>Booyah</A> 
    </lesson> 
    <lesson> 
     <A>Wowzer</A> 
    </lesson> 
</lessons> 

То, что я хочу, чтобы выбрать уроки с не <A> тегов, и только уроки с <A> теге имея текст Да. Другие исключаются.

Как это сделать?

ответ

2

Если описание вашего требования гласит: «Возвратите все X, но исключая все, что имеет Y», вам почти всегда нужен предикат .

просто использовать следующее выражение XPath:

/lessons/lesson[not(A = 'No')] 

Предполагая, что хорошо сформированный входной документ (ваше нет, потому что один из lesson элементов не закрыт), то результат будет (разделенные индивидуальные результаты по --------):

<lesson>blah</lesson> 
----------------------- 
<lesson>blah</lesson> 
----------------------- 
<lesson>blah</lesson> 
----------------------- 
<lesson> 
<A>Yes</A> 
</lesson> 
----------------------- 
<lesson> 
<A>Booyah</A> 
</lesson> 
----------------------- 
<lesson> 
<A>Wowzer</A> 
</lesson> 

причина я хочу конкретно Да, го исключить что-нибудь еще, что может быть в будь то нет, или любое другое значение

Затем используйте

/lessons/lesson[A = 'Yes'] 

и результат будет (очевидно):

<lesson> 
    <A>Yes</A> 
</lesson> 

Если вы также хотели бы выбрать lesson элементов, если у них нет дочернего элемента A, используйте

/lessons/lesson[A = 'Yes' or not(A)] 

и результат будет

<lesson>blah</lesson> 
----------------------- 
<lesson>blah</lesson> 
----------------------- 
<lesson>blah</lesson> 
----------------------- 
<lesson> 
<A>Yes</A> 
</lesson> 
+0

Благодаря Mathias, я на самом деле редактировать пост, просто исключая нет, не будет работать, потому что я хочу конкретно Да, и исключать ничего, что может быть в быть его нет или любое другое значение. – jensanity5000

+0

@ jensanity5000 См. Мое редактирование - выберите тот, который соответствует вашим требованиям. –

Смежные вопросы