2011-01-28 5 views
3

私は、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

+1

ところで、あなたは 'new XmlTextReader()'を使うべきではありません。 .NET 2.0以降、非推奨になっています。代わりに 'XmlWriter.Create()'を使用してください。 –

+0

また、あなたに合理的なデータを与えることについて考えていますか?ヘッダや何かに基づいてXMLブロックを識別できない限り、バイナリとテキスト(XML)を混在させることはあまり意味がありません。 –

+0

最後に、追加のヘッダー情報を使用して、最後に解析する前にXMLデータをストリームから抽出しました。そのアプローチはうまく機能し、下位互換性があります – Romout

答えて

0

、事前にあなたに 乾杯を非常に感謝します

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

関連する問題