【问题标题】:Avoid escaping ' entity with .NET XmlDocument class避免使用 .NET XmlDocument 类转义 ' 实体
【发布时间】:2014-09-02 22:12:24
【问题描述】:

如何避免 XmlDocument 类替换 '带有 ' 字符的实体? 例如,如果我有:

string xml = "<a> &apos; </a>";

做完之后

var doc = new XmlDocument();
doc.LoadXml(xml);
string output = doc.OutterXml;

输出的值为

"<a>'</a>"

我需要避免这种情况,因为我必须加载 XML,进行一些更改并对其进行数字签名,因此签名的 XML 必须与加载的相同。

【问题讨论】:

  • 您不能对 XML 文档进行更改并对其进行签名,以使其与更改前相同。这就是改变的定义。那么……你能更详细地解释一下那部分吗? &amp;apos;' 在元素文本中应该可以互换。
  • 另外,你使用XmlDocument而不是XDocument有什么原因吗?
  • 确实,在我添加之后,该符号将应用于 XML,这样就不会出现问题,问题是如果 XML 最初带有 '并在加载 XmlDocument 对象后更改为 '
  • 是的,使用 XmlDocument 代替 XDocument 有一些原因,但无论如何我用 XDocument 进行了测试,结果是一样的。
  • 我想知道为什么人们不提供答案而只是对问题投反对票。有理由拒绝投票吗?如果你给我你的理由,我愿意改进这个问题。

标签: c# .net xmldocument


【解决方案1】:

对于您的特定要求,请勿使用XmlDocument 或任何其他 XML 解析器来解析原始文档。

请使用XmlDocument 或任何其他特定于XML 的类来创建您的新文档,除了在原始文档需要放置的位置放置一个占位符,例如ORIGINAL_DOCUMENT_HERE。然后在为新文档生成结果文本 XML 后,将 ORIGINAL_DOCUMENT_HERE 替换为您收到的原始文本,然后对结果进行签名。

不是使用 XML 的常规方式,但应该适用于您的特定用例。

【讨论】:

  • SamuelNeff,谢谢您的回复,但问题是我使用 .Net 框架来执行签名,并且它在 XmlDocument 下使用,所以我也需要另一个签名库。这很重要,因为我正在工作的项目很旧并且充满了 XmlDocument 的使用,所以我需要更改大量可以正常工作的代码(当然实体除外)。
  • @hdkrus,很抱歉听到这个消息。遗留代码总是很有趣。
猜你喜欢
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 2020-02-28
  • 2017-10-23
  • 2020-05-31
  • 2011-07-15
  • 1970-01-01
  • 2018-08-31
相关资源
最近更新 更多