2010-10-06 117 views
10

我想從下面的標籤中提取name屬性值XPath查詢如何讓基於兩個屬性的一個屬性的值

<application 
    comments="Do not erase this one" 
    executable="run_CIET" 
    icon="default" 
    instances="1" 
    mode="1" 
    name="CIET" 
    order="10" 
    selection="1" 
    tool="y" 
/> 

,如下圖所示,我可以輕鬆地獲得基於模式的價值name屬性值的值

xpath Applications.xml '//applications/application[@mode='3']'/@name 

但是,如果我想添加更多condtion這是「獲取name屬性值,當模式= X和工具屬性是不存在的應用程序標記」

我們做個怎麼辦是什麼?我試過類似

xpath Applications.xml '//applications/application[@mode='3' and [email protected]]'/@name 

但它不工作。

我還沒有使用的XPath棘手我搜索上的XPath W3C幫助之前,我發現,但沒有找到我想要的東西。請幫忙。

+0

問得好,+1。請參閱我的答案以獲得有關您的問題的解釋,一個簡短而完整的解決方案和一些建議。 :) – 2010-10-06 13:17:12

回答

16
How do we do this? I tried something like 

    xpath Applications.xml '//applications/application[@mode='3' and [email protected]]'/@name 

but its not working. 



[email protected] 

在XPath中語法無效。有一個!=運營商,但沒有!運營商。

使用

//applications/application[@mode='3' and not(@tool)]/@name 

有兩件事情,你應該儘量避免:使用!=操作

  1. - 它有奇怪的定義,並沒有表現得如not()函數 - 如果其中一個操作數是節點集,則永遠不要使用它。

  2. 儘量避免使用//的縮寫 - 這可能會導致顯着的低效率,並且具有異常行爲,這對大多數人而言並不明顯。

5

使用的not(@tool)代替[email protected]應該做的工作。如果您的XPath引擎不行爲,您可以設想count(@tool)=0,但這不應該是必需的。

相關問題