XML だけでなく、バイナリ BLOB やテキストなどの他のデータも含むストリームから SAX (XmlTextReader) を使用して XML を読み取る単純なアプリを作成しようとしています。ストリームの構造は、単純にチャンク ベースです。
私の読み取り関数に入ると、ストリームは XML の先頭に適切に配置されます。問題を次のコード例に減らしました。
string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Models />" + (char)0x014;
XmlTextReader reader = new XmlTextReader(new StringReader(xml));
reader.MoveToContent();
reader.ReadStartElement("Models");
これらの数行は、文字列の末尾にある 0x014 が原因で、ReadStartElement を呼び出すときに例外を引き起こします。
興味深い点は、代わりに次の入力を使用すると、コードが問題なく実行されることです。
string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Models></Models>" + (char)0x014;
そのサイズのためにドキュメント全体を読みたくないし、古いデータ入力との下位互換性を維持する必要があるため、入力を変更したくありません。
最初に考えられる唯一の解決策は、最後の終了タグの後に読み続けないカスタム ストリーム リーダーです。
この問題を解決する方法について何かアイデアはありますか? すでに LINQ の XDocument を使用しようとしましたが、これも失敗しました。
よろしくお願いします。
ロムート