我不确定如何说出我想要做的事情,但我想尝试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()
答案 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
一句小话(因为我无法在没有重大清理的情况下运行您的代码):$FOO
和return
不一样,XQuery区分大小写。此外,您错过了{{1}}条款。