2011-03-04 7 views
0

Я хочу создать запрос XPath, который возвращает участников, чья «работа» - это «Актер» и чей «порядок» находится между «0» и «4» из следующих XML. Мне сложно создать запрос, который делает оба.XPath Поиск по атрибутам

<cast> 
    <person name="David Silverman" character="" job="Director" order="0"/> 
    <person name="James L. Brooks" character="" job="Author" order="0"/> 
    <person name="Dan Castellaneta" character="Homer J. Simpson" job="Actor" order="0"/> 
    <person name="Julie Kavner" character="Marge Simpson" job="Actor" order="1"/> 
    <person name="Nancy Cartwright" character="Bart Simpson" job="Actor" order="2"/> 
    <person name="Yeardley Smith" character="Lisa Simpson" job="Actor" order="3"/> 
    <person name="Dan Castellaneta" character="Krusty the Clown" job="Actor" order="4"/> 
    <person name="Hank Azaria" character="Moe Szyslak" job="Actor" order="5"/> 
    <person name="Dan Castellaneta" character="Apu Nahasapeemapetilon" job="Actor" order="6"/> 
</cast> 

ответ

3
cast/person[@job="Actor" and @order >= 0 and @order <= 3] 

возвращает четыре симпсона, которые вы хотите.

+0

спасибо, я попробую. – RonanC

+0

Это работало с удовольствием ..... так просто, и я чувствую себя настолько глупо. Огромное спасибо. Большая помощь – RonanC

0

Вы можете использовать //cast/person[@job='Actor' and position()<3].

+0

Спасибо большое за быстрый ответ. Мне известно использовать @job для доступа к атрибуту job, но мне было интересно, можно ли также указать дополнительное ограничение [@order> = '0' и @order <= '4'], в то же время время, задающее [@job = 'Actor'] в одном запросе – RonanC

+0

@ user644347 Я новичок в XPath, и я заметил, что другие два решения использовали 'order' вместо' position', что заставляет меня полагать, что я использовал менее правильное решение. Кто-нибудь мне это объясняет? Благодарю. – alex

0

Вы должны быть в состоянии объединить свои предикаты //cast/person[@job='Actor' and @order>=0 and @order<=3]

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