XmlTextReader节点值与值集不同

时间:2011-01-03 10:47:26

标签: c# xml

我有一个由memorystream初始化的XmlTextReader,而MemoryStream中的值是:

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

在MemoryStream中,我有与此值对应的好字节数组,但是当我这样做时:

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

我得到以下result值:

  

“\ r \ n \吨\吨\吨\ tvalue \ r \ n \吨\吨\ t” 的

为什么将回车和表格附加到值?我在创建阅读器时不添加它...

希望我足够清楚。

感谢您的帮助。

[编辑]

    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 ( )

2 个答案:

答案 0 :(得分:3)

您确定这是此结果的文字输入吗? 您是否尝试将memStream转储到(调试)文件并对内容进行了解析?

ReadElementContentAsString()将连接CDATA和空格。看起来您的输入更像是

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

答案 1 :(得分:-1)

您可以像这样创建XmlReader。

 var settings = new XmlReaderSettings { IgnoreWhitespace = true };
 var reader = XmlReader.Create(new StringReader(@"<val>       <![CDATA[value]]>       </val>"), settings);

这会让事情变得更容易。