如何使用xquery检索具有匹配特定条件的子节点的父节点?

时间:2013-01-22 10:58:35

标签: xml xslt xquery

我正在尝试从我的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的WHERE中添加标准并返回父节点 但结果总是返回具有完整子节点的Match 也就是说,结果与原始结果没有区别 有没有什么好方法可以摆脱那些类型不是Home的事件呢? 谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

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

您可以在http://28.io/sandbox/index#QzdH/9PIwe11cJnVVZSqhpBdJkQ=

上试用此示例

答案 1 :(得分:0)

如果您使用的是大文件,我建议您使用以下查询:

for $match in $odds/Match
return <Match>
{$match/attribute()}
{$match/element()[@type = "Home"]}
</Match>

您可以在http://28.io/sandbox/index#dwQcDXHxyl69BijJq6o5Mx8Fvrk=处看到此示例 另外,如果您希望使用Zorba流式传输大型XML文档,我建议您查看http://www.zorba-xquery.com/html/entry/2012/05/31/XML_Streaming上的教程

相关问题