6

次のようなXMLがあります

<Jobs>
   <job>
   ....
   </job>
   <job>
   ....
   </job>
   ....
</Jobs>

xmlreader と xmlwriter またはその他のオプションを使用して、ファイル全体をメモリに取り込まずに、各ジョブ ノードを個別のファイルに書き込む最善の方法は何でしょうか?

4

3 に答える 3

3
  1. 入力ファイルの XmlReader を作成します。
  2. リーダーを最初のジョブ要素に配置します。
  3. ReadSubtree Methodを使用してサブツリー XmlReader を作成します。
  4. 出力ファイル用の XmlWriter を作成します。
  5. WriteNode Methodを使用して、サブツリー XmlReader の内容を XmlWriter にコピーします。
  6. 元のリーダーを次のジョブ要素に配置し、最初のジョブ要素と同様に続行します。
    読み取るジョブ要素がなくなったら中断します。
于 2012-08-04T05:51:45.053 に答える
2

XSLT 3.0 とストリーミングはまだ初期段階ですが、次の XSLT 3.0 スタイルシートは、Saxon-EE 9.4 で機能するはずです。

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:mode streamable="yes" on-no-match="shallow-copy">
<xsl:template match="job">
  <xsl:result-document href="job{position()}.xml">
    <xsl:next-match/>
  </xsl:result-document>
</xsl:template>
</xsl:stylesheet>
于 2012-08-05T08:14:02.907 に答える
0

データが実際に説明したとおりに見える場合 (空白を含む)、最良のオプションは StreamReader を使用することです。現在の行の最後まで読み取るメソッドがあります。に到達するまで、行を読みます</job>。次に、そのジョブをフラッシュして繰り返します。

また、XmlReader が悪いオプションだとは思いません。

于 2012-08-04T05:52:50.310 に答える