我在使用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 / team [@id = $ path / team [@ id = $ id] / refer / team / @ idref]中的$ z
这条道路上最严重的是什么?
EDIT2: 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时带有子元素。
答案 0 :(得分:0)
编辑后的答案:您可以使用以下XQuery达到预期的结果
let $file := doc("input.xml")/root,
$id := "1" return
for $z in $file/team[@id = $id] return $z
返回带有team
的{{1}}元素。
答案 1 :(得分:0)
对于您发布的第二个示例,我无法重现您的问题
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>
以允许在in中使用该工具而无需加载外部资源,所选结果为
'''
hello this is a test to remove anything after
因此,看来您发布的样本中至少有一个应该与您显示的路径之一兼容。如果仍然有问题,则可能需要编辑并显示一个最小,完整的XML示例,以及一个可以使我们重现问题的最小完整的XPath或XQuery。