这是新手问题。我最近刚刚开始学习 XQuery 和 XPath。
考虑这个 XML
<employees>
<employee empid="1">
<ename>KING</ename>
<mgr/>
<hiredate>17-11-1981</hiredate>
</employee>
<employee empid="2">
<ename>BLAKE</ename>
<mgr>7839</mgr>
<hiredate>1-5-1981</hiredate>
<test>
<sub1>one</sub1>
<sub2>two</sub2>
</test>
</employee>
</employees>
当我执行以下 XQuery 时,
let $db := db:open("example")
for $item1 in $db/employees/employee,
$item2 in $db/employees/employee/test
return ($item1/mgr,$item1/ename,$item2/sub1)
我得到了...
<mgr/>
<ename>KING</ename>
<sub1>one</sub1>
<mgr>7839</mgr>
<ename>BLAKE</ename>
<sub1>one</sub1>
我希望得到的结果是......
<mgr/>
<ename>KING</ename>
<mgr>7839</mgr>
<ename>BLAKE</ename>
<sub1>one</sub1>
这是因为 sub1 只存在于/employee/@empid='2' 中。
有人可以指出我正确的方向吗?谢谢
最佳答案
在您的 for
表达式中
for $item1 in $db/employees/employee,
$item2 in $db/employees/employee/test
$item1
迭代所有 employees/employee
元素,$item2
迭代所有 employees/employee/test
元素,独立于 $item1
的当前值。
要获得您需要的内容,您可以尝试以下操作:
for $item1 in $db/employees/employee,
return ($item1/mgr,$item1/ename,
for $item2 in $item1/test
return $item2/sub1)
或更短:
$db/employees/employee/(mgr, ename, test/sub1)
关于xml - 如何避免 XQuery 结果重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35417665/