3

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 を使用しようとしましたが、これも失敗しました。

よろしくお願いします。

ロムート

4

1 に答える 1

0

これがあなたが探しているものであるかどうかはわかりませんが、代わりに呼び出す場合:

reader.IsStartElement("Models");

ノードが開始タグまたは空の要素タグであり、名前が一致する<Models/>場合にのみノードがテストされます。リーダーはそれを超えて移動しません (Read() メソッドは呼び出されません)。

于 2011-01-28T15:40:49.517 に答える