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 に基準を追加し、親ノードを RETURN しようとしました。
ただし、結果は常に完全な子ノードを含む Match を返します。
つまり、結果と元の結果に違いはありません。
タイプがホームではないイベントを取り除く良い方法はありますか?
助けてくれてありがとう!

4

2 に答える 2

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 に答える
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 に答える