【问题标题】:How to use decimal entity codes in XML instead of hexadecimal entity codes如何在 XML 中使用十进制实体代码而不是十六进制实体代码
【发布时间】:2017-09-18 09:41:32
【问题描述】:

在我的 C# 应用程序中,我正在从具有 \r \n 字符的源读取数据,并将它们转换为 XmlDocument。当使用 XmlDocument 的 CreateElement 方法时,它会使用十六进制实体代码对它们进行转义,例如 


我必须将此 XML 发送到仅接受十进制实体代码的第 3 方应用程序。所以我必须发送


如何配置 XmlDocument 以使用十进制实体代码?

【问题讨论】:

  • 使用 System.Net.WebUtility.HtmlEncode();和 System.Net.WebUtility.HtmlDecode();
  • 你能举个例子吗?我必须使用 HTML api 来构建 XML 吗? XML 类之一中是否没有直接设置?
  • 无设置。您必须使用 WebUtility 进行转换。见维基:en.wikipedia.org/wiki/…
  • 嗯,好的。可以举个例子如何使用吗?
  • 您使用的是序列化程序吗?您编写自定义属性来处理 To() 字符串的序列化程序。

标签: c# xml


【解决方案1】:

一旦接收器应用程序出现问题,最简单的方法是引入后处理步骤,将您的 XML 字符串烘焙为“可接受的”格式。因此, string.Replace() 肯定会在这里为您提供帮助。效率不高,非常有效。悲伤但真实。

【讨论】:

  • 有没有办法将所有十六进制实体代码更改为十进制实体代码?我需要为所有可能的实体代码调用 string.Replace() 。有这样的字符串实用程序吗?或者任何我可以获得十六进制实体代码及其十进制等价物的完整列表的地方,以便我可以将它作为资源文件加载并循环和替换?
  • @AllSolutions,你可以寻找“”,然后使用类似stackoverflow.com/questions/28274757/…
【解决方案2】:

当您的接收应用程序不接受正确的 XML 时,最好的办法是更改接收应用程序。 (同样,如果您的发送应用程序没有发送正确的 XML,最好更改发送应用程序)。这就是标准的意义所在:如果你想获得 XML 的好处,每个人都必须遵守规则。

生成受约束的 XML 通常既困难又昂贵,因为它限制了您对工具的选择,或者您必须手动编写东西而不是使用现成的软件。

我认为没有多少工具可以让您控制数字字符引用的书写方式,但可以控制数字字符引用的一种工具是 Saxon(PE 或更高级别)。您可以使用扩展属性 saxon:character-representation 作为附加的序列化属性:请参阅http://www.saxonica.com/documentation/index.html#!extensions/output-extras/serialization-parameters

【讨论】:

  • 但接收应用程序正在接受正确的十进制实体代码。它唯一的限制是它不接受十六进制实体代码。当然,我无法更改接收应用程序,因为它是第三方应用程序。
  • 如果接收应用程序不接受十六进制实体代码,则它不是符合标准的 XML 应用程序。 (我认为我们应该在 StackOverflow 上有一个“非 XML”标签。如果人们开始使用 XML 而不是非 XML,那么在 XML 标签下提出的很多问题都会消失)。说你不能改变它就像说你不能仅仅因为它不接受标准电源插头而改变一个电源插座。
猜你喜欢
  • 2011-11-20
  • 1970-01-01
  • 2011-03-29
  • 2012-10-13
  • 2014-10-25
  • 2019-01-01
  • 2023-03-20
  • 2017-09-06
  • 2012-05-29
相关资源
最近更新 更多