在xml元素中转义xml

时间:2011-11-28 18:56:31

标签: xml deserialization

我有从第三方应用程序得到的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>

正如您所见,<data>内有一个转义的xml,同样在<data>的第一行末尾有一行换行\n\r,前面有2个空格在<data>

这是我的反序列化方法:

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

使用此方法,数据元素的值为:

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

现在,我的问题是:

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

1 个答案:

答案 0 :(得分: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)