2012-02-16 153 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

相关问题