XQuery:创建一个新序列并返回它

时间:2016-05-26 15:21:50

标签: xml xquery flwor

我想要实现的是将$stationsSequence中的值添加到新序列$newSequence中,然后在序列中返回distinct-values。我“天真地”试图用这样的if语句来做:

let $stationsSequence := fn:doc("stations.xml")//station
let $newSequence := ()

for $station in $stationsSequence 

    return

        if ( fn:starts-with($station, "W") or fn:starts-with($station, "B") )
        then
            fn:insert-before($newSequence , last(), $station)
        else ()

        fn:distinct-values($newSequence)

这样做的正确方法是什么? 谢谢

1 个答案:

答案 0 :(得分:1)

您无法在XQuery中更新变量,因为变量是不可变的。也就是说:

let $s := ()
return
    let $s1 := fn:insert-before($s, last(), "a")
    let $s2 := fn:insert-before($s, last(), "b")
    return
        $s2

给出结果:

("b")

相反,您必须创建一个包含旧值和新值的新变量,然后重复该变量,直到获得所有值。

但是,我认为最容易解决问题的方法是:

fn:distinct-values(
    fn:doc("stations.xml")//station[fn:substring(., 1, 1) = ("W", "B")]
)