2013-06-03 54 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