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