2011-11-28 60 views
0

里面我有XML的外观IL得到第三方应用和结构是这样的:逃脱XML XML元素

<root> 
<id>1</id> 
<data>&lt;node&gt;i like it&lt;node&gt;\n\r 
    &lt;node&gt;i like it&lt;node&gt;</data> 
</root> 

就像你看到的是有逃脱的XML内<data>,也是在第一线的末端的<data>有一个换行符\n\r和在<data>的2行前面有2个空格。

这里是我的反序列化方法:

public static root Deserialize(string xml) 
{ 
    System.IO.StringReader stringReader = null; 
    try 
    { 
     stringReader = new System.IO.StringReader(xml); 
     return ((root)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader)))); 
    } 
    finally 
    { 
     if ((stringReader != null)) 
     { 
      stringReader.Dispose(); 
     } 
    } 
} 

Afther使用这种方法的数据元素的值是:

"&lt;node&gt;i like it&lt;node&gt;\n &lt;node&gt;i like it&lt;node&gt;" 

而现在,我的问题是:

为什么\r从数据字符串中删除? 有没有办法除了使用简单的string.replace();以外的其他方式删除换行符和空格?

回答

1

...数据元素的值是:

"&lt;node&gt;i like it&lt;node&gt;\n &lt;node&gt;i like it&lt;node&gt;" 

没有,值实际上是

"<node>i like it<node>\n <node>i like it<node>" 

为什么\r从数据串删除?

\r被标准化。 XML中的换行符是\n - 只要任何发生的不同类型的换行符被替换为XML解析过程的一部分。

有没有办法用简单的string.replace();来除去换行符和空格符?

用空字符串可以正则表达式替换\n$\s*

Regex.Replace(data, @"\n\s*", String.Empty, RegexOptions.Multiline)