如何正确使用子类参考路径
How is correctly path to use children like reference
我的 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),但它不起作用。我从这条路径中得到了空 return 。
感谢您的帮助!
编辑:
我已经描述得很糟糕了。我想要 return 整个元素 <team id="7">...</team>
id 和 <team id="8">...</team>
我试过这个 ($path is doc("input.xml")/root):
$z 在 $path/team[@id = $path/team[@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>
它应该 return 我整个
<team id="1">
<ele1/>
<ele2/>
<refer>
<team idref="2"/>
<team idref="3"/>
</refer>
</team>
当 $id=3 时带有子元素。
编辑后的答案:您可以使用以下 XQuery
获得所需的结果
let $file := doc("input.xml")/root,
$id := "1" return
for $z in $file/team[@id = $id] return $z
其中 returns team
元素与 $id=1
。
我无法重现您的问题,因为您发布的第二个样本的查询是
declare variable $id external := 3;
/root/team[@id = /root/team[@id=$id]/refer/team/@idref]
in https://xqueryfiddle.liberty-development.net/gWcDMeu,我只是简单地正确声明了变量 id
并将 $path/team[@id = $path/team[@id=$id]/refer/team/@idref]
中的 $path
替换为 /root
以允许使用在该工具中没有加载外部资源,选定的结果是
<team id="1">
<ele1/>
<ele2/>
<refer>
<team idref="2"/>
<team idref="3"/>
</refer>
</team>
看来您发布的示例中至少有一个应该可以与您显示的路径之一一起使用。如果您仍然遇到问题,那么您可能想要编辑并显示一个最小且完整的 XML 示例以及一个最小且完整的 XPath 或 XQuery,以便我们重现该问题。
我的 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),但它不起作用。我从这条路径中得到了空 return 。 感谢您的帮助!
编辑:
我已经描述得很糟糕了。我想要 return 整个元素 <team id="7">...</team>
id 和 <team id="8">...</team>
我试过这个 ($path is doc("input.xml")/root):
$z 在 $path/team[@id = $path/team[@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>
它应该 return 我整个
<team id="1">
<ele1/>
<ele2/>
<refer>
<team idref="2"/>
<team idref="3"/>
</refer>
</team>
当 $id=3 时带有子元素。
编辑后的答案:您可以使用以下 XQuery
获得所需的结果let $file := doc("input.xml")/root,
$id := "1" return
for $z in $file/team[@id = $id] return $z
其中 returns team
元素与 $id=1
。
我无法重现您的问题,因为您发布的第二个样本的查询是
declare variable $id external := 3;
/root/team[@id = /root/team[@id=$id]/refer/team/@idref]
in https://xqueryfiddle.liberty-development.net/gWcDMeu,我只是简单地正确声明了变量 id
并将 $path/team[@id = $path/team[@id=$id]/refer/team/@idref]
中的 $path
替换为 /root
以允许使用在该工具中没有加载外部资源,选定的结果是
<team id="1">
<ele1/>
<ele2/>
<refer>
<team idref="2"/>
<team idref="3"/>
</refer>
</team>
看来您发布的示例中至少有一个应该可以与您显示的路径之一一起使用。如果您仍然遇到问题,那么您可能想要编辑并显示一个最小且完整的 XML 示例以及一个最小且完整的 XPath 或 XQuery,以便我们重现该问题。