4

我们从各种来源获得了大量的 xml 数据。utf 为 8。

我们注意到有些似乎是&. &&在 for 的标签内A & BA & B. (从原始帖子更正为&&)

这会引起一些麻烦,因为大多数 XML 组件都不喜欢它。

它有效吗?删除这些的最佳方法是什么?我们使用 VB.Net 2008

4

1 回答 1

10

&是“有效的”,但您是否要使用它是另一个问题。

如果您正在用 XML 编写文档,&则将用于表示 & 符号。如果您的 XML 文档所描述的内容本身以类似的方式编码——例如 HTML——那么该内容在逻辑上可能包含一个&自身。这可能会导致&XML 中的一个。

例如,假设您有一个描述一组用户的 XML,包括一个支持 HTML 的“签名”字段:

<users>
 <user username="jsmith" ...>
  ...
  <signature type="text/html">
   John Smith's Heating And Plumbing
  </signature>
</users>

如果约翰史密斯想在他的签名中使用 a&而不是And,那将是......

  <signature type="text/html">
   John Smith's Heating &amp; Plumbing
  </signature>

...&编码为&amp;使 XML 解析器满意的地方。

想想签名包含在 HTML 电子邮件中的情况。XML 解析器将解码&amp&. 如果将签名直接转储到电子邮件中,这将导致“&”实体在消息源中未转义。

但是,如果 XML 已包含&amp;amp;,则在 XML 解析时它将变为&amp;. 然后它将作为正确转义的 HTML 包含在电子邮件中。

完成相同转义的一种更易读的方式可能是这样......

  <signature type="text/html">
   <![CDATA[John Smith's Heating &amp; Plumbing]]>
  </signature>

以上假设签名将包含 HTML 编码的实体,这些实体会进一步编码到 XML 文档中。这是明显的双重编码的来源。例如,如果签名应该只包含纯文本,那么将只有一种编码——&从纯文本到&amp;XML 文档。因此,从 XML 的角度来看,两者&amp;amp;&amp;都是“有效的”,并且在实践中,它将取决于将数据编码到 XML 文档中的规范。

(编写 XML 模式时的第三种选择是使用 XML 命名空间来允许包含包含的 HTML 而无需双重编码;这将具有允许对其进行验证的额外好处,但实际上应用严格的 XML 样式验证HTML 内容是一个令人头疼的问题。参见例如失败的推广和标准化 XHTML 的尝试。)

于 2014-08-12T20:47:53.270 回答