Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何使用xquery检索父节点和与特定条件匹配的子节点?_Xml_Xslt_Xquery - Fatal编程技术网

Xml 如何使用xquery检索父节点和与特定条件匹配的子节点?

Xml 如何使用xquery检索父节点和与特定条件匹配的子节点?,xml,xslt,xquery,Xml,Xslt,Xquery,我试图从xml文件中获取部分数据, 源文件如下所示: <Odds> <Match ID="101" Time="A"> <Event type="Home"> <Score="1"/> </Event> <Event type="Away"> <Score="2"/> </Event> </Match> <Match

我试图从xml文件中获取部分数据,
源文件如下所示:

<Odds>
  <Match ID="101" Time="A">
    <Event type="Home">
      <Score="1"/>
    </Event>
    <Event type="Away">
      <Score="2"/>
    </Event>
  </Match>
  <Match ID="102" Time="B">
    <Event type="Home">
      <Score="1"/>
    </Event>
    <Event type="Away">
      <Score="2"/>
    </Event>
  </Match>
</Odds>

我想获得赔率、比赛、事件、分数标签,其中事件类型仅与“主场”匹配。
也就是说,结果如下:

<Odds>
  <Match ID="101" Time="A">
    <Event type="Home">
      <Score="1"/>
    </Event>
  </Match>
  <Match ID="102" Time="B">
    <Event type="Home">
      <Score="1"/>
    </Event>
  </Match>
</Odds>

我对XML很熟悉,读过一些书。
尝试在xquery的何处添加条件并返回父节点。
但结果总是返回与完整子节点的匹配。
也就是说,结果与原始结果没有差异。
有没有什么好办法可以摆脱那些类型不在家的事件?

谢谢你的帮助

如果您的XQuery处理器支持XQuery更新,您可以编写以下内容:

  copy $odds-proj := $odds
  modify delete node $odds-proj//Event[@type = "Away"]
  return $odds-proj

您可以在

上尝试此示例,如果您正在处理一个大文件,我建议您使用以下查询:

for $match in $odds/Match
return <Match>
{$match/attribute()}
{$match/element()[@type = "Home"]}
</Match>
在$赔率/匹配中匹配$match
返回
{$match/attribute()}
{$match/element()[@type=“Home”]}
您可以在现场看到这个示例
此外,如果您希望使用Zorba来流式处理大型XML文档,我建议您在

您的xquery表达式看起来如何?这可能是正确的,但是您使用的xquery实现/测试仪还显示了所有返回节点的父节点和子节点。有些人这样做了,你应该用“xslt”标签来问这个问题。XSLT解决方案很简单——只有几行。您对XSLT解决方案感兴趣吗?当然!欢迎任何解决方案!这也是一种新的学习方式。谢谢如果您正在处理一个巨大的文档,一个更有效的解决方案是对文档进行转换。在这种情况下,查询将更加复杂。