【问题标题】:How Can I Preserve Character Entities In .Net XDocument?如何在 .Net XDocument 中保留字符实体?
【发布时间】:2011-02-02 22:05:45
【问题描述】:

我正在将一组服务移植到 .Net 4.0 并发现(令我沮丧的是)我在 XElement.Value() 中创建和存储的字符实体正在“恢复”到它们的原始字符当我将 XDocument 对象转换为用于 HTTP 响应的 XML 流时的值。

“转义”字符需要在 XML 文档中显示为字符实体(例如 ® 而不是 ®),以与仅允许非拉丁字符的字符实体的旧版应用程序保持兼容。

有没有办法(不同的文档类型,或 Encoding() 方法,或其他什么)我可以配置 XDocument 以在创建 XML 流时保留这些字符实体?也许我可以使用 XDocument 或 XmlDocument 的替代品?

【问题讨论】:

  • 如果您希望将文本存储为 ®而不是 ® 您必须使用 XML 中可用的任何机制(字符数据、转义字符等)转义所有保留字符(例如 &)。这意味着您不会在 XML 文档中存储字符 ® - 您将存储一个 & 符号、一个井号、四个数字和一个分号。但如果那是你想要的,那就是你应该做的。 :) 如果您只是将 .Value 设置为 { 它应该逐字存储,而不是解析 - 您确定可以重现吗?
  • 你会这么想的,不是吗。 :-) 它将与符号转换为&,因此您最终会在输出中出现奇怪的乱码。是的,在输出响应之前,我可以用真正的 & 号替换它们,但我希望我只是错过了配置标志、设置、读取器/写入器或......

标签: character-encoding linq-to-xml escaping


【解决方案1】:

您是否尝试过创建一个编码设置为 latin-1 的 XmlWriter,然后使用它保存 XDocument?我没试过,但它可能会强制它使用不必要的字符实体。

如果连 Unicode 都不支持,你在用什么可怕的软件?

【讨论】:

  • 尝试了几种不同的编码,但我仍然处于第一阶段。该软件是/是服务消费者编写的遗留应用程序,它们期望任何高于 127H 的内容都会被转义。
  • @jerhewet:听起来很糟糕。告诉他们您的更新使正确的 Unicode 支持成为强制性要求。
猜你喜欢
  • 1970-01-01
  • 2010-09-12
  • 2021-12-07
  • 2011-01-14
  • 1970-01-01
  • 2012-09-11
  • 2017-06-11
相关资源
最近更新 更多