背景
私はリーダーとライターを使用してXMLドキュメントを読み書きしています。読み取り操作と書き込み操作の間にフィルタリングロジックを配置して、読み取った部分を書き戻す必要があるかどうかを判断しています(事実上、一部のタグを削除します)...
私が現在選択している実装は、XmlNodeReader、XmlWriter、XmlNodeTypeを使用したものです。
using System.Xml;
// Read every node
using (XmlNodeReader reader = new XmlNodeReader(xmlFragment)) {
// But write out only nodes I want
using (XmlWriter writer = XmlTextWriter.Create(sb, writerSettings)) {
while (reader.Read()) {
//... with filtering logic here to choose what is to be written.
// I do want to write out all entity references
if (XmlNodeType.EntityReference == reader.NodeType)
; // but how do I do that here?
}
}
}
問題
リーダーでエンティティ参照に遭遇すると、空の文字列 ""が表示されますが、reader.Value
実際には、
遭遇したXMLソースの値です。したがって、それは検出されますが、私が持つことはできません。
どうやら特殊またはエッジケース:解析中にエンティティ参照がやや特殊であることを示す
次のMSDN記事を見つけましたが、実用的なソリューションに使用することはできませんでした。詳細はまばらに思えます-それを補足するコードサンプルがあるといいのですが。