如何正确使用像参考一样的孩子

时间:2019-05-18 20:52:19

标签: xml path xquery idref

我在使用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时带有子元素。

2 个答案:

答案 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。