2011-11-28 68 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)