2014-04-01 167 views
2

我有點被卡住,試圖使用XPath表達式來選擇所有元素,這些元素給了我除了那些沒有屬性的元素之外的所有元素。從沒有屬性的XML文檔中選擇所有元素

我試圖XPath表達式如下

//book[not(@*)] 

但這只是與圖書內容合作。如何爲整個XML文檔製作它?

更新/澄清:

<root> 
    <node lang="eng"> Hello how r u </node> 
    <node lang = "urdu">mera dost </node> 
    <node lang ="itally">chayoo chayoo </node> 
    <node> shukria </node> 
    <items> 
    <item> first item </item> 
    <item type="Green"> second item</item> 
    </items> 
    <values price = "very low"> Price </values> 
    <values> normal price</values> 
    <values price= "very hight"> H price </values> 
</root> 

我試圖與//*[not(@*)]但這XPath表達式選擇<items>元件以及還含有<item type= "Green">second item </item>。我應該如何避免這種情況?

+0

用'*'替換'book' –

+0

首先在測試之前使你的XML片段格式完整。如果你已經這樣做了,那麼請用例子來說明你的問題,以便我們能夠理解那正確。 «// * [不是(@ *)]»是唯一的解決方案,如果沒有的話,請寫多一點.... – Cylian

+0

嘗試過'«// * [不是(@ *),而不是(* [@ * ])]»'... – Cylian

回答

1

//可用於選擇任何後代; *可用於選擇任何元素;和@*可以選擇任何屬性,因此:

//*[not(@*)] 

每個操作的更新日期:

要排除有屬性的後代元素:

//*[not(@*) and not(.//*[@*])] 

因此,對於您給定的XML,只將選擇以下節點:

<node>shukria</node> 
<item>first item</item> 
<values>normal price</values> 

按要求。

相關問題