2011-01-03 2 views
1

を設定:のMemoryStreamでXmlTextReaderはノードの値と同じではないが、私はMemoryStreamをすることによって初期化のXmlTextReaderをした、とのMemoryStreamの値である

<val><![CDATA[value]]></val> 

Iがこの値に対応した良好なバイト配列をしました、私が行うときには\ rを\ nは\ T \ T \ T \ tvalue \ r \ n」が

XmlTextReader reader = new XmlTextReader(myMemoryStream); 
reader.ReadToFollowing("val"); 
string result = reader.ReadElementContentAsString(); 

を私は次のresult値を取得します\ t \ t \ t "

キャリッジリターンと表がなぜ値に追加されるのですか?私は読者を作成するときに私はそれを追加しません...

私は十分明確です。

ありがとうございました。

[EDIT]

byte[] DEBUGvalue = myMemoryStream.GetBuffer() 
             .SkipWhile((b) => b != (byte)'[') 
             .TakeWhile((b) => b != (byte)']') 
             .Select((b) => b).ToArray(); 

そしてDEBUGvalueが含まれています

[0] 91 byte ([) 
    [1] 67 byte (C) 
    [2] 68 byte (D) 
    [3] 65 byte (A) 
    [4] 84 byte (T) 
    [5] 65 byte (A) 
    [6] 91 byte ([) 
    [7] 118 byte (v) 
    [8] 97 byte (a) 
    [9] 108 byte (l) 
    [10] 117 byte (u) 
    [11] 101 byte (e) 
    [12] 32 byte () 
    [13] 32 byte () 
    [14] 32 byte () 
    [15] 32 byte () 
    [16] 32 byte () 
+0

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

+0

この非推奨については何も見ていません。なぜそれが非難されているのか知っていますか?ありがとう –

+0

あなたは地球上でもっと多くの時間を費やす必要があります:.NET 2.0はずっと前でした。あなたはこれを見逃してしまいました。 [XmlTextReaderクラス](http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.aspx)から: ".NET Frameworkバージョン2.0のリリースでは、XmlReaderインスタンスを作成することをお勧めしますXmlReader.Createメソッドを使用すると、このリリースで導入された新機能をフルに活用できます。 –

答えて

3

は、あなたがこの結果のリテラル入力されていますか?
memStreamを(デバッグ)ファイルにダンプして内容を検査しましたか?

は、CDATAと空白を連結します。あなたの入力がもっと似ているようです。

<val> 
    <![CDATA[value]]> 
    </val> 
+0

はい、CDATAは新しいラインに入っています。それがその理由です!ありがとうございます:) –

+0

あなたはいつも '.Trim()'を結果に適用できます(すべての空白を同じように扱います)。 –

+0

または、CDATAのコンテンツを読むだけですか?トリムは私の場合はあまりにも多いです:/ –

-1

このようにXmlReaderを作成することができます。

これは物事を少し楽にします。

+0

いいえ、空白は私にとって重要です;)、問題は既に解決されています(前の記事とコメントを参照)。 –

+1

うん、私は記事を読んだ。ちょうどそれがこの記事を読んでいる誰かのために価値があるかもしれないと思った。 –

+0

-1 "他人"の質問ではなく、この質問にお答えください –

関連する問題