我们从各种来源获得了大量的xml数据。 utf是8。
我们注意到有些似乎是&
的双重编码。 &&
标记内的A & B
以A & B
的形式出现。 (从原始帖子更正为&&&&)
这会导致一些悲伤,因为大多数XML组件都不喜欢它。
有效吗?删除这些的最佳方法是什么?我们使用VB.Net 2008
答案 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 & Plumbing
</signature>
...将&
编码为&
,以使XML解析器满意。
考虑HTML电子邮件中包含签名的情况。 XML解析器会将&
解码为&
。如果签名被直接转储到电子邮件中,这将导致&#34;&amp;&#34;实体在消息的来源中显示未转义。
但是,如果XML包含&amp;
,则在XML解析时它将变为&
。然后它将作为正确转义的HTML包含在电子邮件中。
实现相同转义的更可读方式可能就是这个......
<signature type="text/html">
<![CDATA[John Smith's Heating & Plumbing]]>
</signature>
以上假设签名包括HTML编码实体,这些实体进一步编码到记录的XML中。这是明显的双重编码的来源。例如,如果签名应该只包含纯文本,那么对于XML文档,只有一个编码 - &
从纯文本到&
。因此,&amp;
和&
都是&#34;有效&#34;从XML的角度来看,实际上它将取决于要编码到XML文档中的数据的规范。
(编写XML模式时的第三个选择是使用XML命名空间来允许包含HTML而不进行双重编码;这将带来额外的好处,允许对其进行验证,但在实践中应用严格的XML-对HTML内容进行样式验证是一件令人头疼的问题。例如,看看在XHTML上推广和标准化失败的尝试。)