在创建XML时需要处理哪些特殊字符?

时间:2011-03-23 07:39:12

标签: c# xml parsing xml-parsing

我正在编写XML解析器;我的应用程序创建XML文件。为此,我必须处理特殊字符 - 例如,我知道<应该替换为&lt;,同样>应该替换为&gt;,依此类推。以这种方式需要处理的所有不同角色是什么?

4 个答案:

答案 0 :(得分:1)

查看此维基百科文章: http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

(除非您出于学术目的,我建议您使用现有的.Net Xml解析库,例如System.Xml命名空间或System.Xml.Linq中的那些。如果您正在尝试序列化/反序列化对象,使用内置的Xml序列化)

答案 1 :(得分:0)

对于XML 解析,您不需要执行这些替换 - 您需要在创建 XML时执行这些替换。您还需要考虑在需要时将&替换为&amp; - 有关详细信息,请参阅XML规范。

但是,我强烈建议您不要编写自己的XML API。 .NET已经包含了其中的几个,包括出色的LINQ to XML。使用它而不是建立自己的。您独立创建类似质量的XML API的可能性非常低,并且您将花费大量时间来开始使用。

使用体面的XML API,您无需担心字符转换等问题 - API会为您处理它们。

答案 2 :(得分:0)

list of XML escape codes listed here

使用System.XML.XMLConvert类为您处理特殊字符:

class Program
{
    static void Main(string[] args)
    {
        string s;
        s = System.Xml.XmlConvert.EncodeName("valid XML --> !@#$%^&*()");
        Console.WriteLine("Encoded: {0}", s);
        Console.WriteLine("Decoded: {0}",System.Xml.XmlConvert.DecodeName(s));
        Console.ReadLine();
    }
}

将产生这样的结果:

  

编码:   valid_x0020_XML_x0020 _ - _ x003E__x0020__x0021__x0040__x0023__x0024__x002   5__x005E__x0026__x002A__x0028__x0029 _

     

解码:有效的XML - &gt; !@#$%^&放大器; *()

答案 3 :(得分:0)

有一个内置的.NET方法SecurityElement.Escape用于转义某些(不是全部)无效的XML字符。看看这个链接:

http://msdn.microsoft.com/en-us/library/system.security.securityelement.escape%28v=VS.80%29.aspx