如何进行加入'使用XQuery中的子元素

时间:2014-11-22 20:06:01

标签: xquery

我不确定如何说出我想要做的事情,但我想尝试FID,BID和Something的所有操作。请考虑以下XML:

<FOO>
    <FID>f1</FID>
    <NAME>f1</NAME>
    <BAR>
        <BID>b1</BID>
        <SOMETHING>15</SOMETHING>
    </BAR>
    <BAR>
        <BID>b2</BID>
        <SOMETHING>25</SOMETHING>
    </BAR>
</FOO>
<FOO>
    <FID>f2</FID>
    <NAME>f2</NAME>
    <BAR>
        <BID>b1</BID>
        <SOMETHING>35</SOMETHING>
    </BAR>
    <BAR>
        <BID>b3</BID>
        <SOMETHING>0</SOMETHING>
    </BAR>
</FOO>

我需要的是:

b1  f1  15
b1  f2  35
b2  f1  25
b3  f2  0

有人知道我会用的语法吗? 我试过了:

for $foo in /root/FOO
for $bar in /root/FOO/BAR
let $fid := $foo/FID/text() where $foo/BAR/BID/text()=$bar/BID/text()
let $bid := $foo/BAR/BID/text() where $foo/BAR/BID/text()=$bar/BID/text()
let $something := $foo/BAR/SOMETHING/text() where $foo/BAR/BID/text()=$bar/BID/text()

1 个答案:

答案 0 :(得分:0)

如果您想首先按<FID/>元素进行排序,那么就像在<FOO/>上循环一样简单<BAR/> s for $foo in /root/FOO for $bar in /BAR return string-join(($foo/FID, $bar/BID, $bar/SOMETHING), ' ') 每次都转储一个字符串:

<BID/>

对于按for $bar in //BAR order by $bar/BID return string-join(($bar/BID, $bar/../FID, $bar/SOMETHING), ' ') 进行分组,您必须首先对这些进行分组并相对收集其他信息:

$foo

一句小话(因为我无法在没有重大清理的情况下运行您的代码):$FOOreturn不一样,XQuery区分大小写。此外,您错过了{{1}}条款。