带有字符串连接的XQuery,一个参数是字符串,另一个是数字

时间:2012-07-10 08:05:36

标签: xquery

我想列出相应年份的订单总数。

<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函数中使用整数而不是字符串。或者还有其他方法可以获得相同的输出吗?

1 个答案:

答案 0 :(得分:1)

string-join期望字符串,而不是count返回的数字。添加一个演员表,它将会运行。

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

我修复了两个错误:

  • 为什么要查询属性Y?没有。
  • 您需要计算<Order>代码,而不是<Orders>

使用concat可能会使代码更具可读性(只要你只使用两个参数)?