私は、XMLだけでなくバイナリのBLOBやテキストなどの他のデータも含むストリームからSAX(XmlTextReader)を使用してXMLを読み取る単純なアプリケーションを作成しようとしています。ストリームの構造は単純にチャンクベースです。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を使用しようとしましたが、失敗しました。 、
reader.IsStartElement("Models");
を:
が、これはあなたが探しているかなり何であれば、私は知りませんが、あなたが代わりに呼び出す場合
Romout
ところで、あなたは 'new XmlTextReader()'を使うべきではありません。 .NET 2.0以降、非推奨になっています。代わりに 'XmlWriter.Create()'を使用してください。 –
また、あなたに合理的なデータを与えることについて考えていますか?ヘッダや何かに基づいてXMLブロックを識別できない限り、バイナリとテキスト(XML)を混在させることはあまり意味がありません。 –
最後に、追加のヘッダー情報を使用して、最後に解析する前にXMLデータをストリームから抽出しました。そのアプローチはうまく機能し、下位互換性があります – Romout