2012-03-01 2 views
5

У меня есть XML, как это:выражение XPATH, которое соответствует по значению атрибута «истина»

<engine-set> 
    <engine host-ref="blah1.com"> 
    <property name="foo" value="true"/> 
    <property name="bar" value="true"/> 
</engine> 
<engine host-ref="blah2.com"> 
    <property name="foo" value="true"/> 
    <property name="bar" value="false"/> 
</engine> 
</engine-set> 

Я хочу, чтобы соответствовать по всем элементам двигателя, которые имеют свойство дочернего узла с именем равным «бар» и значение равно «true». Я нахожу факт, что «истина» появляется в моем XML, поэтому мое условие всегда оценивается как true в выражении XPath. Есть ли способ? Я использую Python и lxml.

EDIT:

Мое выражение XPath является (что не работает) является: // двигатель [(свойство/@ Name = 'бар' и свойство/@ = значение "истина")]

Спасибо,

+0

Что такое ур выражение XPath? – Jayy

+1

Downvoting, потому что мы не можем сказать вам, что вы сделали неправильно, если вы не сообщите нам, что вы сделали. –

ответ

5

Так вы говорите

//engine[property[@name='bar' and @value='true']] 

дает слишком много результатов? Потому что для меня это дает только один.

2

Какое выражение XPath вы пытались?

Следующая кажется, работает хорошо в получении «blah1.com», но не «blah2.com»: //engine[property[@value="true"][@name="bar"]]

Помните, что вам нужно упаковать ваши тестовые значения параметров в кавычках.

17

Я хочу, чтобы соответствовать по всем элементам двигателя

Это:

//engine 

, которые имеют свойство

дочернего узла Теперь это становится:

//engine[property] 

с именем, равным "бар"

Еще более конкретно:

//engine[property[@name = 'bar']] 

и и значение, равное "истина".

Наконец:

//engine[property[@name = 'bar' and @value = 'true']] 
+0

Я понял, что мой xpath все время работал, я делал что-то глупое. Тем не менее, у Димитрива был ответ, который я получил. Благодаря! –

+3

@ G-Man, тогда, пожалуйста, примите его ответ, поэтому он получает за это кредит. – qris

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