2012-02-16 165 views
5

如何選擇父節點具有某些屬性的節點。 例如:什麼是Xpath來選擇所有expiration_time元素。 在以下XML中,如果states元素具有屬性,則會出錯,否則不會出現probs。如何選擇父節點具有某些屬性的節點

感謝

<lifecycle> 
    <states elem="0"> 
    <expiration_time at="rib" zing="chack">08</expiration_time> 
    </states> 
    <states elem="1"> 
    <expiration_time at="but">4:52</expiration_time> 
    </states> 
    <states elem="2"> 
    <expiration_time at="ute">05:40:15</expiration_time> 
    </states> 
    <states elem="3"> 
    <expiration_time>00:00:00</expiration_time> 
    </states> 

</lifecycle> 

回答

4

states/expiration_time[../@elem = "0"]

+0

這個符號確實幫助我找到了一個給定的父母的所有子元素(多個不同的元素),其中一個屬性等於某個東西! //field[../@id =「FSCHA」] =返回其父元素具有id = FSCHA的所有字段元素。但是//* [../@id =「FSCHA」]在同一場景下返回了所有元素,而不僅僅是字段。 – 2014-01-12 19:07:07

0

這會給你有ATLEAST一個屬性

//*[count(./@*) &gt; 0] 
3

使用所有節點:

/*/*/expiration_time 

這裏選擇是XML的頂級元素的盛大孩子都expiration_time元素文件。

/*/*[@*]/expiration_time 

這將選擇任何expiration_time元件的父具有至少一個屬性,並且是XML文檔的頂部元素的子元素。

/*/*[not(@*)]/expiration_time 

這將選擇任何expiration_time元件,其父母有沒有屬性,是XML文檔的頂級元素的一個孩子。

/*/*[@elem = '2']/expiration_time 

這將選擇任何expiration_time元件的父具有elem屬性與字符串值「2」,這是(父)的XML文檔的頂部元素的子元素。

+0

+1這幫了我很多。非常好的例子! – mrt 2014-05-20 11:31:31

+0

@mrt,不客氣:) – 2014-05-20 16:15:48

相關問題