xml - 如何避免 XQuery 结果重复?

标签 xml xpath xquery basex

这是新手问题。我最近刚刚开始学习 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/

相关文章:

java - 如何递归遍历XPath?

xpath - 无法从Dynamic Web Page使用importXML获取数据?

html - 通过带有字符通配符的属性值选择带有 Xpath 的元素

java - 将特定类型的第一个元素映射到字段

xml - XML 中的元素和节点有什么区别?

jquery - 错误 : "Origin null is not allowed by Access-Control-Allow-Origin" when loading an XML file with JQuery's ajax method

java - 如何使用 xpath 相对于通过 innerText 标识的另一个元素来定位一个元素

xquery - 使用 MarkLogic 时不要在构面中包含重复数据

jquery - 将 JSON 与 XQuery 页面结合使用

Python:xpath 稳健地获取表中的数据