2012-03-01 38 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> 

我想匹配上有一個子節點屬性使用一個名稱等於「bar」的所有引擎元素和值等於「真」。我發現在我的XML中出現「true」這一事實導致我的條件在XPath表達式中始終評估爲true。有沒有辦法解決?我正在使用Python和lxml。

編輯:

我的XPath表達式(即不工作)是: //發動機[(屬性/ @名稱= '酒吧' 和屬性/ @值= 「真」)]

感謝,

+0

什麼是烏拉圭回合的XPath表達式? – Jayy 2012-03-01 17:29:24

+1

Downvoting,因爲如果你不告訴我們你做了什麼,我們不能告訴你你做錯了什麼。 – 2012-03-01 22:38:26

回答

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一直工作,我正在做一些愚蠢的事情。儘管如此,迪米特雷已經有了我所追求的答案。謝謝! – 2012-03-02 10:21:33

+3

@ G-Man那麼請接受他的回答,所以他得到了信任。 – qris 2014-02-10 17:06:30