1

我的 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 is doc("input.xml")/root):

对于 $z 在 $path/team[@id = $path/team[@id=$id]/refer/team/@idref]

这条路有什么不好?

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 时带有子元素。

4

2 回答 2

0

编辑后的答案:您可以使用以下 XQuery 获得所需的结果

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

它返回team带有$id=1.

于 2019-05-18T22:25:17.927 回答
0

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

declare variable $id external := 3;

/root/team[@id = /root/team[@id=$id]/refer/team/@idref]

https://xqueryfiddle.liberty-development.net/gWcDMeu中,我只是正确声明了变量id并替换了$pathin $path/team[@id = $path/team[@id=$id]/refer/team/@idref]with的使用,/root以允许在该工具中使用 with 而无需加载外部资源 选定的结果是

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

因此,您发布的至少一个示例似乎应该与您显示的路径之一一起使用。如果您仍然有问题,那么您可能想要编辑和显示单个、最小且完整的 XML 示例以及允许我们重现问题的最小且完整的 XPath 或 XQuery。

于 2019-05-19T11:26:28.697 回答