根据元素在 Xquery 3.0 中的位置以不同的顺序连接元素
Joining elements in separate sequences based on their position in Xquery 3.0
我有 2 个序列,如下所示:
let $city := ('London', 'Tokyo')
let $country := ('England', 'Japan')
let $region := ('Europe','Asia')
我想做的是操纵 2 个序列,使其显示为:
<Data>
<location>
<city>London</city>
<country>England</country>
<region>Europe</region>
</location>
<location>
<city>Tokyo</city>
<country>Japan</country>
<region>Asia</region>
</location>
</Data>
我的计划是执行以下操作:
1) 分别为$city、$country、$region序列分别添加一个计数,如下所示。请注意,我没有详细说明如何执行此操作,但我相信它应该相当简单。
let $city := ('1London', '2Tokyo')
let $country := ('1England', '2Japan')
let $region := ('1Europe','2Asia')
2) 加入序列中每个项目的第一个字符,并以某种方式对其进行操作,如下所示。请注意此代码不起作用,但我相信它可以起作用。
let $city := ('1London', '2Tokyo')
let $country := ('1England', '2Japan')
let $region := ('1Europe','2Asia')
for $locCity in $city, $locCountry in $country, $locRegion in $region
where substring($locCity,1,1) = substring($locCountry ,1,1) and
substring($locCountry ,1,1) = substring($locRegion ,1,1)
let $location := ($locCity,$locCountry,$region)
return
$location
但是,这根本不起作用。我不确定如何真正进行。我确信有更好的方法来解决这个问题。也许 "group by" 方法可能有效。任何帮助将不胜感激。谢谢
干杯
周杰伦
使用 max()
找出哪个序列具有最多的项目,然后从 1 迭代到 max()
并为每个构建一个 <location>
元素。 Select 使用谓词的每个序列的值 select by position:
xquery version "1.0";
let $city := ('London', 'Tokyo')
let $country := ('England', 'Japan')
let $region := ('Europe','Asia')
return
<Data>
{
for $i in 1 to max((count($city), count($country), count($region)))
return
<location>
<city>{ $city[$i] }</city>
<country>{ $country[$i] }</country>
<region>{ $region[$i] }</region>
</location>
}
</Data>
我有 2 个序列,如下所示:
let $city := ('London', 'Tokyo')
let $country := ('England', 'Japan')
let $region := ('Europe','Asia')
我想做的是操纵 2 个序列,使其显示为:
<Data>
<location>
<city>London</city>
<country>England</country>
<region>Europe</region>
</location>
<location>
<city>Tokyo</city>
<country>Japan</country>
<region>Asia</region>
</location>
</Data>
我的计划是执行以下操作:
1) 分别为$city、$country、$region序列分别添加一个计数,如下所示。请注意,我没有详细说明如何执行此操作,但我相信它应该相当简单。
let $city := ('1London', '2Tokyo')
let $country := ('1England', '2Japan')
let $region := ('1Europe','2Asia')
2) 加入序列中每个项目的第一个字符,并以某种方式对其进行操作,如下所示。请注意此代码不起作用,但我相信它可以起作用。
let $city := ('1London', '2Tokyo')
let $country := ('1England', '2Japan')
let $region := ('1Europe','2Asia')
for $locCity in $city, $locCountry in $country, $locRegion in $region
where substring($locCity,1,1) = substring($locCountry ,1,1) and
substring($locCountry ,1,1) = substring($locRegion ,1,1)
let $location := ($locCity,$locCountry,$region)
return
$location
但是,这根本不起作用。我不确定如何真正进行。我确信有更好的方法来解决这个问题。也许 "group by" 方法可能有效。任何帮助将不胜感激。谢谢
干杯 周杰伦
使用 max()
找出哪个序列具有最多的项目,然后从 1 迭代到 max()
并为每个构建一个 <location>
元素。 Select 使用谓词的每个序列的值 select by position:
xquery version "1.0";
let $city := ('London', 'Tokyo')
let $country := ('England', 'Japan')
let $region := ('Europe','Asia')
return
<Data>
{
for $i in 1 to max((count($city), count($country), count($region)))
return
<location>
<city>{ $city[$i] }</city>
<country>{ $country[$i] }</country>
<region>{ $region[$i] }</region>
</location>
}
</Data>