我的XML文件是这样的:
<element id="1" time="05-08-2012T12:00">...</element>
<element id="2" time="05-08-2012T13:00">...</element>
<element id="3" time="05-08-2012T14:00">...</element>
...
<element id="13" time="06-08-2012T00:00">...</element>
<element id="14" time="06-08-2012T01:00">...</element>
现在我想做的是:
for $ d in // mesure / @ date
表示子字符串中的$ date($ d,0,11)
返回distinct-values($ date)
但它不断返回“05-08-2012”,就像在XML文件中打印一样多次。
我还想知道如何更改我在HTML选项框中输入的值(例如“05-08-2012”将变为“2012年8月5日”)。应该使用功能吗?
最后,我想保留包含给定日期的第一个元素的id,所以当我在HTML选择框中选择它时,我可以使用来自和使用此日期的所有元素。
答案 0 :(得分:2)
使用强>:
distinct-values(//measure/@date/substring-before(.,'T'))
要获得完整的想要结果,请使用:
let $months := ('January', 'February', 'March', 'April', 'May', 'June', 'July',
'August', 'September', 'October', 'November', 'December'),
$dates := distinct-values(//measure/@date/substring-before(.,'T'))
return
for $date in $dates,
$d in tokenize($date, '-')[1],
$m in xs:integer(tokenize($date, '-')[2]),
$y in tokenize($date, '-')[3]
return
($d, $months[$m], $y, '
')
在以下XML文档上应用此XQuery的结果:
<t>
<measure id="1" date="05-08-2012T12:00">...</measure>
<measure id="2" date="05-08-2012T13:00">...</measure>
<measure id="3" date="05-08-2012T14:00">...</measure>
...
<measure id="13" date="06-08-2012T00:00">...</measure>
<measure id="14" date="06-08-2012T01:00">...</measure>
</t>
<强>是强>:
05 August 2012
06 August 2012
答案 1 :(得分:1)
这是因为如果将distinct-values应用于$ date,则仅$ date只有一个值(并且单个值始终不同)。您需要将它应用于整个序列,即
distinct-values( for $d in //mesure/@date return substring($d,0,11) )
要更改日期,最好使用tokenize函数拆分组件,然后重新排序。
let $splitDate := tokenize("05-08-2012", "-"), $monthNames := ("January", "February" , ...)
return concat($splitDate[1] cast as integer, " ", $monthNames[$splitDate[2] cast as integer], " ", $splitDate[3])
您可以尝试使用xs:date(..)将日期作为实际日期读取,然后使用XQuery日期函数进行打印,但是输入日期,组件的顺序错误,因此XQuery可能无法解析它...
答案 2 :(得分:-1)
您需要在序列上获得不同的值:
distinct-values(//mesure/@date/substring(.,0,11))
可以使用xs:dateTime值上的fn:format-dateTime
格式化日期:
format-dateTime($d, "[D] [MNn] [Y]")
=> 5 August 2012
对于最后一个问题,您需要更具体地说明您要对这些元素的ID做什么,并提供有关此数据的更多信息。 (这应该是一个单独的问题)