【问题标题】:What are the possible special characters which need to be handled in creating XML?创建 XML 时可能需要处理哪些特殊字符?
【发布时间】:2011-03-23 07:39:12
【问题描述】:

我正在编写一个 XML 解析器;我的应用程序创建 XML 文件。为此,我必须处理特殊字符——例如,我知道< 应该替换为<,类似地> 应该替换为>,等等。有哪些不同的字符需要用这种方式处理?

【问题讨论】:

  • 只要您使用 XMLDocument 或 XmlWriter 对象之类的东西,您应该不会有任何问题,所有特殊字符的编码都会为您完成。但是,如果您尝试通过连接字符串来创建 XML,那么您可能需要重新考虑您的方法。请记住,.Net 框架有一些对象可以为您完成所有这些工作。

标签: c# xml parsing xml-parsing


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      会产生这个结果:

      编码: 有效_x0020_XML_x0020__-_x003E__x0020__x0021__x0040__x0023__x0024__x002 5__x005E__x0026__x002A__x0028__x0029_

      解码:有效的 XML --> !@#$%^&*()

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-22
          • 2013-06-04
          • 1970-01-01
          相关资源
          最近更新 更多