Xml XQuery中的计数给出奇怪的结果

Xml XQuery中的计数给出奇怪的结果,xml,xquery,Xml,Xquery,我在计算两天内有多少次去加利福尼亚的旅行 我的当前XQuery如下所示: for $x in doc("triptracker.xml")/data/cities/city, $y in doc("triptracker.xml")/data/trips/trip let $date as xs:date := xs:date($y/date) where $x/cityName = $y/cityName and $x/state = "CA" and $date gt xs:date

我在计算两天内有多少次去加利福尼亚的旅行

我的当前XQuery如下所示:

for $x in doc("triptracker.xml")/data/cities/city,
  $y in doc("triptracker.xml")/data/trips/trip
let $date as xs:date := xs:date($y/date)
where $x/cityName = $y/cityName and $x/state = "CA"  and 
$date gt xs:date("2003-01-01") and $date lt xs:date("2006-12-31")
return <Result>Trips to California: {count($y)}</Result>
doc中的$x(“triptracker.xml”)/data/cities/city,
$y在文档中(“triptracker.xml”)/data/trips/trip
将$date设为xs:date:=xs:date($y/date)
其中$x/cityName=$y/cityName和$x/state=“CA”和
$date gt xs:date(“2003-01-01”)和$date lt xs:date(“2006-12-31”)
返回加州:{count($y)}
这给了我结果集

<Result>Trips to California: 1</Result>
<Result>Trips to California: 1</Result>
<Result>Trips to California: 1</Result>
<Result>Trips to California: 1</Result>
<Result>Trips to California: 1</Result>
加州之旅:1 加州之旅:1 加州之旅:1 加州之旅:1 加州之旅:1 而不是让我数到5

以下是为trip和city提供的XML数据类型

<trips>
    <trip>
        <ssn>123-20-4567</ssn>
        <cityName>Tucson</cityName>
        <date>2001-08-11</date>
    </trip>
</trips>
<cities>
    <city>
        <cityName>Houston</cityName>
        <state>TX</state>
        <location>
            <latitude>29.76045</latitude>
            <longitude>-95.369784</longitude>
        </location>
    </city>
</cities>

123-20-4567
图森
2001-08-11
休斯敦
德克萨斯州
29.76045
-95.369784

任何帮助都将不胜感激

我最终注意到,通过使用fors,我永远不会只得到1个计数,因此我使用let对其进行了修改

let $x := doc("triptracker.xml")/data/cities/city[state = "CA"],

$y := doc("triptracker.xml")/data/trips/trip[cityName=$x/cityName 
and xs:date(date) gt xs:date("2003-01-01")  
and xs:date(date) lt xs:date("2006-12-31")]

return <Result>Trips to California: {count($y)}</Result>
let$x:=doc(“triptracker.xml”)/data/cities/city[state=“CA”],
$y:=doc(“triptracker.xml”)/data/trips/trip[cityName=$x/cityName
和xs:date(日期)gt xs:date(“2003-01-01”)
和xs:date(日期)lt xs:date(“2006-12-31”)]
返回加州:{count($y)}

正确。“for”表达式的return子句对“in”表达式的每个值计算一次(如果有多个“for”,则对每个组合计算一次)因此,在return子句中没有进行聚合的方法,也没有必要这样做,因为如果要在序列上进行聚合,则不需要在序列上进行迭代。