2012-03-01 10 views
5

mam niektóre XML jak poniżej:XPATH wyraz, który pasuje na wartości atrybutu „true”

<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> 

Chcę pasuje do wszystkich elementów silnika, które mają właściwość węzła dziecko o nazwie równa „bar” i i wartość równa "true". Zauważyłem, że "prawda" pojawia się w moim XMLu powoduje, że mój stan zawsze jest prawdziwy w wyrażeniu XPath. Czy jest jakiś sposób obejścia? Używam Pythona i lxml.

EDIT:

Moja XPath wyrażenie to (nie pracuje) wynosi: // silnika [(własność/@ name = 'bar' i mienia/@ value = "true")]

Dzięki,

+0

Co jest ur wyrażenie XPath? – Jayy

+1

Dobieganie, ponieważ nie możemy powiedzieć, co zrobiłeś źle, jeśli nie powiesz nam, co zrobiłeś. –

Odpowiedz

5

Więc mówisz

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

daje zbyt wiele wyników? Ponieważ dla mnie daje tylko jeden.

2

Jakiego wyrażenia XPath próbowaliście?

Poniższa wydaje się działać dobrze w uzyskaniu „blah1.com”, ale nie „blah2.com”: //engine[property[@value="true"][@name="bar"]]

Pamiętaj, że trzeba otaczać swoje wartości testowe parametrów w cudzysłów.

17

Chcę pasuje do wszystkich elementów silnika

To jest:

//engine 

które mają właściwość węzła dziecko

Teraz ta postać:

//engine[property] 

o nazwie równej "bar"

jeszcze bardziej konkretne:

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

i a wartość równa "true".

Wreszcie:

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

Zrozumiałem, że mój xpath działał przez cały czas, robiłem coś głupiego. Niemniej jednak Dimitre miał odpowiedź, której szukałem. Dzięki! –

+3

@ G-Man, proszę, zaakceptuj jego odpowiedź, więc dostanie za to kredyt. – qris

Powiązane problemy