1

私の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>

今私がやりたいことは次のとおりです。

  • 個別の日付のみを含む HTML オプション ボックスを作成します。私はこれを試しました:

//mesure/@date の $d について

for $date in substring($d,0,11)

個別の値を返す($date)

しかし、XML ファイルに出力された回数だけ "05-08-2012" を返し続けます。

  • また、HTML オプション ボックスに入力した値を変更する方法も知りたいです (たとえば、"05-08-2012" は "5 August 2012" になります)。関数を使用する必要がありますか?

  • 最後に、特定の日付を含む最初の要素の ID を保持したいので、HTML 選択ボックスで選択すると、この日付のすべての要素を使用できます。

4

3 に答える 3

3

使用

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, '&#xA;')

このXQueryを次のXMLドキュメントに適用した結果

<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 
于 2012-12-17T18:02:39.513 に答える
1

これは、distinct-values を $date に適用すると、$date だけでは値が 1 つしかないためです (そして、単一の値は常に異なる)。シーケンス全体に適用する必要があります。つまり、

 distinct-values( for $d in //mesure/@date return  substring($d,0,11) )

日付を変更するには、トークナイズ機能を使用してコンポーネントを分割し、並べ替えるのがおそらく最適です。

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 はおそらくそれを解析できません.. .

于 2012-12-17T17:40:46.077 に答える
-1

シーケンスで個別の値を取得する必要があります。

distinct-values(//mesure/@date/substring(.,0,11))

fn:format-dateTimexs:dateTime 値を使用して、日付をフォーマットできます。

format-dateTime($d, "[D] [MNn] [Y]")
=> 5 August 2012

最後の質問では、これらの要素の ID で何をしたいのかをより具体的に示し、このデータに関する詳細情報を提供する必要があります。(これはおそらく別の質問になるはずです)

于 2012-12-17T17:45:20.523 に答える