如何正确使用子级路径,如参考



我对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=1team元素

相关内容

  • 没有找到相关文章

最新更新