如何在Xquery中获取序列中的每个项目?

时间:2016-04-14 11:34:52

标签: xml xquery basex xquery-3.0

您好我有一个类似

的XML
<Movies>
    <Movie>
        <Title>$#*! My Dad Says</Title>
        <Year>2010</Year>
        <OtherTitles>
            <OtherTitleName>Beep My Dad Says</OtherTitleName>
            <Year>2010</Year>
            <Country>USA</Country>
            <TitleType>alternative title</TitleType>
            <OtherTitleName>Shit My Dad Says</OtherTitleName>
            <Year>2010</Year>
            <Country>USA</Country>
            <TitleType>uncensored intended title</TitleType>
            <OtherTitleName>Shit! My Dad Says</OtherTitleName>
            <Year>2013</Year>
            <Country>Germany</Country>
            <TitleType>imdb display title</TitleType>
        </OtherTitles>
    </Movie>
</Movies>

我正在尝试将其每个电影的OtherTitleName和年份显示为这样 -

       Beep My Dad Says, 2010   
       Shit! My Dad says, 2010

我试过使用连接但是我得到了预期的错误项,找到了序列。

如何循环浏览每个项目的标题和年份?

编辑:我试过像这样的Xquery。

   for $n in Movies//Movie//OtherTitles

       let $d := ($n/OtherTitleName/text(),$n/Year/text())

         return $d
     // let $d := concat($n/OtherTitleName/text(),$n/Year/text()) Gives me error

2 个答案:

答案 0 :(得分:2)

您可以使用XPath返回每个OtherTitleName元素与对应的Year元素的串联,如下所示:

//OtherTitleName/concat(.,following-sibling::Year[1])

答案 1 :(得分:1)

您可以使用以下代码获取上述结果。

let $OtherTitleName := $xml/Movie/OtherTitles/OtherTitleName/text()
let $Year := $xml/Movie/OtherTitles/Year/text()
for $each at $pos in $OtherTitleName 
return concat($each, ", ", $Year[$pos])