1

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

4

2 回答 2

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=现场试用此示例

于 2013-01-22T13:26:03.457 回答
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

于 2013-01-22T19:59:32.417 回答