【问题标题】:XDocument saves & instead of just &XDocument 保存 & 而不仅仅是 &
【发布时间】:2011-12-11 14:14:32
【问题描述】:

我正在使用 XDocument 来切换 xml 文档中的值。 在新值中,我需要使用字符“&”(和号) 但在 XDocument.save() 之后,xml 改为 &

我尝试过使用编码和其他东西……没有任何效果

【问题讨论】:

  • 你使用的是哪个框架?
  • 查看我关于 .net fw 4 的回答,这是一种已知问题。
  • 在其他答案之后,我们需要查看代码和所需的输出......

标签: c# .net xml linq-to-xml ampersand


【解决方案1】:

XDocument 正在做它应该做的事情。

& 是无效的 XML。 (这是一个未完成的角色/实体参考)

【讨论】:

  • 我必须有这个标志,xml是一个app.config,它有一个到数据库的连接字符串,我需要通过代码来改变它
  • 否;你必须 not 有这个符号,因为这会导致解析错误。转义表示 (&) 正确并且可以正常工作(假设您使用的是实际的 XML 解析器)
  • xml 是 c# 项目中的 app.config 文件,它不适用于 &
  • 你有什么代码在读取app.config;我认为 there (读数)是错误出现的地方
  • 这里的问题是,例如,Entity Framework 的解析器可以很好地解析连接字符串,即使属性值中有 &。
【解决方案2】:

& 在 XML 中表示“实体的开始”,因此如果您想包含 & 作为数据,您必须将其表示为实体 — &(或在 CDATA 块中使用它)。

您所描述的是正常行为,否则 XML 会中断。

【讨论】:

  • & 在属性值内...并且在 connectionString 内,所以我必须拥有它...有什么想法吗?
  • 在属性值中只是意味着不能使用 CDATA 块。因此,使用&唯一 将& 字符表示为数据的一部分。如果使用连接字符串的软件尝试使用 & 而不是 & 连接到数据库,那么它的 XML 解析器已损坏,您需要修复 that
  • 写入器获取 & 并对其进行编码,读取器获取编码版本并对其进行解码。如果你得到的是编码版本,那么某个地方的某个人还没有解码它。如果您的配置文件在属性值中有未转义的 &,则您无法将其视为 xml 文档。它不是 xml。如果你眯着眼睛看起来就是这样。
【解决方案3】:

有两种选择。要么确保对 XML 文档中的所有内容进行正确的 XML 编码/解码。请记住,HTML 和 XML 编码/解码略有不同。

选项二是对 xml 中可能包含无效元素的任何内容使用 base64 编码。

【讨论】:

    【解决方案4】:

    您的输出文件 app.config 是否应该是 XML 文件?

    如果是,则 & 必须转义为 &

    如果不是,那么您应该使用文本输出方法而不是 xml 输出方法:使用<xsl:output method='text'/>

    PS:这个问题似乎与How can I add an ampersand for a value in a ASP.net/C# app config file value重复

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2021-05-18
      • 2016-08-23
      • 1970-01-01
      相关资源
      最近更新 更多