我正在编写XML解析器;我的应用程序创建XML文件。为此,我必须处理特殊字符 - 例如,我知道<
应该替换为<
,同样>
应该替换为>
,依此类推。以这种方式需要处理的所有不同角色是什么?
答案 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时执行这些替换。您还需要考虑在需要时将&
替换为&
- 有关详细信息,请参阅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