Xml 如何正确地使用子类引用

Xml 如何正确地使用子类引用,xml,path,xquery,idref,Xml,Path,Xquery,Idref,我的XML元素路径有问题。在XML文档中,我有: <team id="6"> <refer> <team IDREF="7"/> <team IDREF="8"/> </refer> </team> <team id="7"> <refer> <team ID

我的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是所选团队的变量id(例如,$id=6),但它不起作用。我从这条路回来了。 谢谢你的帮助

编辑:
我描述得很糟糕。我想返回整个元素
..
id和
..
我尝试了这个($path是doc(“input.xml”)/root):

对于$path/team[@id=$path/team[@id=$id]/refere/team/@idref]中的$z

这条路有什么不好的地方

编辑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时使用childrens元素。

编辑回答:您可以通过以下XQuery实现所需的结果

let $file := doc("input.xml")/root,
    $id   := "1" return
for $z in $file/team[@id = $id] return $z

返回带有
$id=1
编辑答案的
team
元素:您可以通过以下XQuery实现所需的结果

let $file := doc("input.xml")/root,
    $id   := "1" return
for $z in $file/team[@id = $id] return $z

它返回
team
元素,其中
$id=1

我无法重现您的问题,因为您发布的第二个示例中的查询是

declare variable $id external := 3;

/root/team[@id = /root/team[@id=$id]/refer/team/@idref]
在中,我只是正确地声明了变量
id
,并将
$path/team[@id=$path/team[@id=$id]/refere/team/@idref]
中的
$path
替换为
/root
,以允许在该工具中使用,而无需加载外部资源。所选结果为

<team id="1">
   <ele1/>
   <ele2/>
   <refer>
     <team idref="2"/>
     <team idref="3"/>
   </refer>
  </team>


因此,您发布的示例中至少有一个应该与您显示的路径之一配合使用。如果您仍然有问题,那么您可能希望编辑并显示一个最小且完整的XML示例,以及一个最小且完整的XPath或XQuery,以允许我们重现该问题。

我无法重现您的问题,因为您发布的第二个示例显示了该查询

declare variable $id external := 3;

/root/team[@id = /root/team[@id=$id]/refer/team/@idref]
在中,我只是正确地声明了变量
id
,并将
$path/team[@id=$path/team[@id=$id]/refere/team/@idref]
中的
$path
替换为
/root
,以允许在该工具中使用,而无需加载外部资源。所选结果为

<team id="1">
   <ele1/>
   <ele2/>
   <refer>
     <team idref="2"/>
     <team idref="3"/>
   </refer>
  </team>


因此,您发布的示例中至少有一个应该与您显示的路径之一配合使用。如果您仍然存在问题,那么您可能希望编辑并显示一个最小且完整的XML示例,以及一个最小且完整的XPath或XQuery,以允许我们重现问题。

将$id作为XPath中的“$id”您是否说过“for$z in$path/team[$id=$path/team[@id=$id]/refere/team/@idref]”或“for$z in$path/team”[@id=$path/team[@id='$id']/refere/team/@idref]”或“对于$path/team['$id'=$path/team[@id']]/refere/team/@idref]中的$z”?没有人知道一个最小但完整的XML输入文档是如何演示问题的?当然那些
team
元素有一些父元素,甚至是一些祖先元素因此,为了允许任何人更正您的路径,我们需要查看完整的结构。好的,我编辑了我的问题。我只是不能使用idref或错误的路径来获取元素。在XPath中将$id作为“$id”您说过“对于$z在$path/team[$id=$path/team[@id]/refere/team/@idref]”或“对于$z在$path/team[@id=$path/team[@id=$id]]/refere/team/@idref]”或“$path/team['$id'=$path/team[@id='$id']]/refere/team/@idref]”中的$z”?没有人知道一个最小但完整的XML输入文档如何演示问题的外观?当然那些
team
元素有一些父元素,甚至有一些祖先元素因此,为了允许任何人更正您的路径,我们需要查看完整的结构。好的,我编辑了我的问题。我只是不能使用idref或错误路径获取元素。我描述得很糟糕。我想返回所有元素…并且…我描述得很糟糕。我想返回所有元素…并且…我的xml中有“idref”,而不是“idref”我如何说…抱歉和感谢我的xml中有“IDREF”,而不是我如何说…抱歉和感谢的“IDREF”