我有一个由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 ( )
答案 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);
这会让事情变得更容易。