我在写一个XML解析器;我的应用程序创建XML文件。为此,我必须处理特殊字符 - 例如我知道应将<
替换为<
,同样应将>
替换为>
,依此类推。需要用这种方式处理的所有不同的角色是什么?在创建XML时需要处理哪些特殊字符?
回答
看到这个维基百科文章: http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
(除非你做它的学术目的,我建议你使用现有的.NET的XML解析库,比如那些在System.Xml
命名空间,或System.Xml.Linq
如果。您尝试序列化/反序列化对象,使用内置的Xml序列)
对于XML解析你不需要执行这些替代品 - 你需要执行他们的时候创建 XML。您也可以考虑在需要的地方替换&
和&
- 请参阅XML规范了解详细信息。
但是,我会强烈建议你不要编写自己的XML API。 .NET已经包含了其中的几个,包括优秀的LINQ to XML。使用它而不是构建自己的。您独立创建自己的XML API的机会非常低,您将花费大量的时间到达那里。
使用体面的XML API,您不必担心字符转换等 - API将为您处理它们。
有一个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 --> [email protected]#$%^&*()");
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 - >!@#$%^ & *()
有一种内置的.NET方法SecurityElement.Escape
用于转义某些(不是全部)无效的XML字符。看看这个链接:
http://msdn.microsoft.com/en-us/library/system.security.securityelement.escape%28v=VS.80%29.aspx
- 1. 处理特殊字符?
- 2. 处理特殊字符
- 3. 在javascript中处理特殊字符
- 4. 在linux和java处理特殊字符($)
- 5. 处理特殊字符在NSURL
- 6. XML特殊字符
- 7. 处理需要被其他特殊字符替换的特殊字符的Java代码
- 8. 需要替换特殊字符
- 9. 魔精:: DOM:做一些字符需要特殊的转义?
- 10. 自动处理特殊字符
- 11. 处理mysql中的特殊字符
- 12. Alfresco:处理PDF中的特殊字符
- 13. 处理的REST API的特殊字符
- 14. 用lucene处理特殊字符
- 15. Hive to CSV - 特殊字符处理
- 16. 处理MySQL全文特殊字符
- 17. sql server 2000:TSQL特殊字符处理
- 18. SHA-512特殊字符处理
- 19. HTML VBS特殊字符处理
- 20. PHP:用iconv处理特殊字符
- 21. Rails 3处理特殊字符
- 22. scrapy:有特殊字符处理的URL
- 23. 处理Nokogiri/Regex中的特殊字符
- 24. 处理c中的特殊字符#
- 25. php file_get_contents()..不处理特殊字符?
- 26. MySQL:哪种数据类型可以处理特殊字符?
- 27. JAX-RS处理XML解析中的特殊字符
- 28. 如何处理XML中的特殊字符(=)
- 29. 处理提取xml中的特殊字符
- 30. 设计编译器时处理递归是否需要特殊处理?
只要你正在使用类似XmlDocument的或XmlWriter的对象,你不应该有任何问题,特殊字符所有的编码格式为你做。但是,如果您尝试通过串联字符串来创建XML,那么您可能需要再次考虑一下您的方法。请记住,.Net框架有对象为你做所有这些和更多。 – openshac 2011-03-23 08:11:10