2013-06-03 56 views
3

给定以下XML,什么Xpath 2.0查询会为我获得每个联系人的最大日期?我的目标是找到在30天内未被触及的联系人。Xpath - 获取每个元素的最大属性

<contacts> 
    <contact> 
    <name>james</name> 
    <touch method='email' date='2002-02-04'>a</touch> 
    <touch method='meeting' date='2010-02-04'>b</touch> 
    </contact> 
    <contact> 
    <name>bob</name> 
    <touch method='phone' date='2001-02-04'>y</touch> 
    <touch method='email' date='2009-02-04'>d</touch> 
    </contact> 
    <contact> 
    <name>cindy</name> 
    <touch method='email' date='2012-02-04'>v</touch> 
    <touch method='phone' date='2012-02-04'>h</touch> 
    </contact> 
    <contact> 
    <name>john</name> 
    </contact> 
</contacts> 

max((//@date/xs:dateTime(.)))会让我一个最大的日期,但我试图让三个日期。

回答

4

更容易使用的版本for

您通常不需要返回节点序列的返回,因为/的确如此。

/contacts/contact/max(.//@date/xs:dateTime(.)) 

,并找到一个极限前的接触:

/contacts/contact[max(.//@date/xs:dateTime(.)) < '2013-05-04'] 
+0

不错。出于某种原因,我需要将“2013-05-04T00:00:00”作为日期时间,以便在我的环境中工作,但它有效。 – GGGforce

1

只要你想获得最大的价值每个接触

for $x in /contacts/contact return max($x//@date/xs:dateTime(.)) 
+0

我需要得到谁没有在特定日期后联系的联系人。把你的xpath放在上面,我想出了$ for $ x in contact max($ x // @ date/xs:dateTime(。))[。 <'2013-05-04']'。但是,如何获取联系人的姓名? – GGGforce