「クリーニング」する必要がある 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