是& amp;有效

时间:2013-08-02 14:41:17

标签: xml

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

我们注意到有些似乎是&的双重编码。 &&标记内的A & BA & B的形式出现。 (从原始帖子更正为&&&&)

这会导致一些悲伤,因为大多数XML组件都不喜欢它。

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

1 个答案:

答案 0 :(得分:6)

&"有效",不管您是否想要使用它是另一个问题。

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

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

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

如果约翰史密斯想要在他的签名中使用&代替And,那就是......

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

...将&编码为&amp;,以使XML解析器满意。

考虑HTML电子邮件中包含签名的情况。 XML解析器会将&amp解码为&。如果签名被直接转储到电子邮件中,这将导致&#34;&amp;&#34;实体在消息的来源中显示未转义。

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

实现相同转义的更可读方式可能就是这个......

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

以上假设签名包括HTML编码实体,这些实体进一步编码到记录的XML中。这是明显的双重编码的来源。例如,如果签名应该只包含纯文本,那么对于XML文档,只有一个编码 - &从纯文本到&amp;。因此,&amp;amp;&amp;都是&#34;有效&#34;从XML的角度来看,实际上它将取决于要编码到XML文档中的数据的规范。

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