【问题标题】:How do I stop XElement.Save from escaping characters?如何阻止 XElement.Save 转义字符?
【发布时间】:2010-04-02 00:08:22
【问题描述】:

我正在用信息填充XElement,并使用XElement.Save(path) 方法将其写入xml 文件。在某些时候,结果文件中的某些字符会被转义 - 例如,> 变为 >

这种行为是不可接受的,因为我需要在 XML 中存储包含 > 字符作为密码一部分的信息。如何将我的 XElement 对象的“原始”内容写入 XML 而不会转义这些内容?

【问题讨论】:

  • 如果您使用 XElement.Load(path),则 >将切换回 >。你能澄清你的问题吗?
  • 在这种情况下,看起来现有的接收代码就是问题所在。是否存在 XML 可以被读入 XElement 而不会发生转义的情况?
  • 您的接收代码是使用 XML 还是字符串?

标签: c# xml escaping xelement


【解决方案1】:

没有这种行为是不可接受的。

独立的未转义 >无效的 XML
XElement 旨在生成有效的 XML。

如果要获取元素的未转义内容,请使用Value 属性。

【讨论】:

  • 其实>通常不需要转义。具体要求见w3.org/TR/REC-xml#syntax。尽管如此,我同意始终保持安全并逃避>。任何符合 XML 规范的解析器都需要理解>
  • 在任何情况下可以诱导 XElement 提供原始字符串(包括转义,如在文件中)而不是未转义的 Value 内容?从你所说的来看,听起来是接收代码有问题。
【解决方案2】:

XML 规范通常允许> 显示为未转义。 XDocument 安全并逃脱它,尽管它出现在不严格要求转义的地方。

您可以对生成的 XML 进行替换。请注意http://www.w3.org/TR/REC-xml#syntax,如果这导致任何]]> 序列,则 XML 将不符合 XML 规范。此外,XDocument.Parse 实际上会拒绝这样的 XML,错误是“']]>' is not allowed in character data.”。

XDocument doc = XDocument.Parse("<test>Test&gt;Data</test>");
// Don't use this if it could result in any ]]> sequences!
string s = doc.ToString().Replace("&gt;", ">");
System.IO.File.WriteAllText(@"c:\path\test.xml", s);

考虑到任何符合规范的 XML 解析器都必须支持 &amp;gt;,我强烈建议修复处理程序 XML 输出的代码。

【讨论】:

  • 我没有使用这个,因为你说的处理代码有问题是对的 - 但这是最​​接近问题的回答。
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多