1

「クリーニング」する必要がある XML データの膨大なチャンクがあります。Xml は次のようになります。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:body>
        <w:p>       
                    <w:t>F_ck</w:t>
            <!-- -->
                <w:t>F_ck</w:t>
            <!-- -->
                            <w:t>F_ck</w:t>
        </w:p>
    </w:body>
</w:document>

<w:t>-要素を値「F_ck」で識別し、値を別のものに置き換えたいと思います。きれいにする必要がある要素は、ドキュメント全体に散らばっています。

コードをできるだけ速く実行し、メモリ フットプリントをできるだけ小さくする必要があるため、XDocumentここや他の場所で見つけた (DOM) アプローチを使用することに消極的です。

データは Xml データを含むストリームとして渡され、直感的に と が必要であることがわかりXmlTextReaderますXmlTextWriter

私の最初のアイデアは、Xml データを SAX モードで前方のみ実行し、それを に「パイプ」するXmlTextWriterことでしたが、それを行うためのインテリジェントな方法が見つかりません。

私はこのコードを書きました:

var reader = new StringReader(content);
var xmltextReader = new XmlTextReader(reader);
var memStream = new MemoryStream();
var xmlWriter = new XmlTextWriter(memStream, Encoding.UTF8);

while (xmltextReader.Read())
{
    if (xmltextReader.Name == "w:t")
    {
        //xmlWriter.WriteRaw("blah");
    }
    else
    {
        xmlWriter.WriteRaw(xmltextReader.Value);
    }
}

上記のコードは、要素宣言などの値のみを取得するため、括弧などはありません。に応じて などを具体.WriteElement()的に実行するコードを記述できることはわかっていますが、すぐに混乱するのではないかと心配しています。.WriteEndElement()NodeType

質問は次のとおりです。

パイプ処理中にデータを操作しながら、XmlTextReaderから読み取った xml データをパイプ処理するにはどうすればよいでしょうか。XmlTextWriter

4

1 に答える 1

0
于 2015-11-05T15:20:30.830 に答える