0

それぞれの年を合計注文数でリストしたいと思います。

<Samples>
  <Sample>
    <Year>2010</Year>
    <Order>20,000</Order>
  </Sample>
  <Sample>
    <Year>2011</Year>
    <Order>20,000</Order>
    <Order>35,000</Order>
  </Sample>
  <Sample>
    <Year>2012</Year>
    <Order>20,000</Order>
    <Order>23,000</Order>
    <Order>40,000</Order>
  </Sample>
</Samples>

私は次のように出力を期待しています-

Year        Orders
2010        1
2011        2
2012        3

要素の数<Order>自体が注文の総数を教えてくれるので、BaseXで次のことを試してみました-

for $x in doc("Sample")/Samples/Sample
   return <li>{string-join ( ($x/Year, count($x/Order)) , " # ")}</li>

しかし、関数で文字列の代わりに整数を使用しているため、エラーが発生し、それは明らかですstring-join。または、同じ出力を取得する他の方法はありますか?

4

1 に答える 1

1

string-join返される数値ではなく、文字列を期待しcountます。キャストを追加すると実行されます。

for $x in /Samples/Sample
   return <li>{ string-join( ($x/Year, xs:string(count($x/Order))), " # ") }</li>

さらに2つのエラーを修正しました。

  • なぜY年に属性をクエリするのですか?なにもない。
  • <Order>ではなく、タグを数えたいと思うでしょう<Orders>

たぶん、を使用concatすると、コードが読みやすくなる可能性があります(2つのパラメーターのみを使用している場合)。

于 2012-07-10T08:23:55.320 に答える