我对XML元素的路径有问题。在XML文档中,我有:
<team id="6">
<refer>
<team IDREF="7"/>
<team IDREF="8"/>
</refer>
</team>
<team id="7">
<refer>
<team IDREF="6"/>
<team IDREF="8"/>
</refer>
</team>
<team id="8">
<refer>
<team IDREF="6"/>
<team IDREF="7"/>
</refer>
</team>
我想要动作 ->单击引用 id=6 的团队,打印引用子元素(两个元素 -> 7 和 8)。 我尝试了这条路径:
for $z in $path/team[@id = $path/team[@id=$id]/refer/team/@idref]
其中$id是来自所选团队的变量 id(例如 $id=6),但它不起作用。我从这条路上有空的回报。 感谢所有的帮助!
编辑: 我描述得很糟糕。我想返回<team id="7">...</team>
id 和<team id="8">...</team>
我尝试过这个($path是 doc("input.xml")/root):
对于$path/团队中的$z[@id = $path/团队[@id=$id]/refer/team/@idref]
这条路有什么不好?
编辑2: XML 文档只有这个:
<root>
<team id="1">
<ele1/>
<ele2/>
<refer>
<team idref="2"/>
<team idref="3"/>
</refer>
</team>
<team id="2">
<ele1/>
<ele2/>
<refer>
<team idref="3"/>
</refer>
</team>
<team id="3">
<ele1/>
<ele2/>
<refer>
<team idref="1"/>
</refer>
</team>
</root>
它应该让我整个
<team id="1">
<ele1/>
<ele2/>
<refer>
<team idref="2"/>
<team idref="3"/>
</refer>
</team>
当$id=3时,带有子元素。
我无法重现您的问题,对于您发布的第二个示例
,查询是declare variable $id external := 3;
/root/team[@id = /root/team[@id=$id]/refer/team/@idref]
在 https://xqueryfiddle.liberty-development.net/gWcDMeu 中,我只是正确声明了变量id
,并将$path
在$path/team[@id = $path/team[@id=$id]/refer/team/@idref]
中的使用替换为/root
以允许在不加载外部资源的情况下在该工具中使用 所选结果为
<team id="1">
<ele1/>
<ele2/>
<refer>
<team idref="2"/>
<team idref="3"/>
</refer>
</team>
因此,似乎至少有一个您发布的样本应该与您显示的路径之一一起使用。如果您仍然遇到问题,那么您可能希望编辑并显示单个、最小和完整的 XML 示例以及允许我们重现问题的最小且完整的 XPath 或 XQuery。
编辑答案:您可以使用以下 XQuery 实现所需的结果
let $file := doc("input.xml")/root,
$id := "1" return
for $z in $file/team[@id = $id] return $z
返回带有$id=1
的team
元素