2

Atom 提要解析器应如何处理提要中的以下 XML 行:

<title type="html"><![CDATA[Johnson &amp; Johnson]]></title>

为了便于讨论,我们假设最初预期的文本实际上是Johnson & Johnson. 我遇到了这个关于这个问题的在线讨论,似乎有两种不同的意见:

1. 意见 #1 - 声称此内容是双重编码的。文本“Johnson & Johnson”文本已被实体转义,然后通过包裹在 CDATA 部分中再次编码。他指出,表现良好的 xml 解析器将返回Johnson &amp; Johnson,因为这就是XML 规范规定 CDATA 编码数据应该被处理的方式。

  1. 意见 #2 - 声称 Atom 规范具有先例。他指出,CDATA 充当传递。Johnson &amp; Johnson出来Johnson &amp; Johnson。如果这只是一个 XML 文档,它将到此结束。但是,因为它是 Atom,所以我们必须查看Atom 规范以确定正确的行为。atom 规范指出,任何带有type="html"contains 实体的元素都会转义 html。因此,我们应该可以自由地对其进行解码。

这些事实中哪一个是正确的?一个适当的 Atom XML 解析器应该产生: Johnson & Johnson还是Johnson &amp; Johnson在这种特殊情况下?

4

3 回答 3

1

两种观点都是正确的:

  • 编码为文本的标题是Johnson & Johnson.
  • 编码为 HTML 的标题是Johnson &amp; Johnson
  • 在 XML 中编码为 HTML 的标题是<![CDATA[Johnson &amp; Johnson]]>
于 2016-05-25T15:12:35.237 回答
0

CDATA 是字符数据 - 被解析器完全忽略。必须是因为xml无法处理&。因此,没有“双重编码”——任何解析器都会跳到结束标记,忽略中间的任何内容。我没有遇到允许实际嵌套的解析器(嵌入完整的 CDATA 打开和关闭标签)。

于 2016-04-22T20:16:28.273 回答
0

CDATA 标记之间的内容不会针对标签实体进行解析,因此文本节点的解析值为Johnson &amp; Johnson.

请注意,该属性表示type="html",因此应将其解析为 HTML。

例如,如果您将其表达为网页,您可能会写:

<h1>Johnson &amp; Johnson</h1>

如果它说过type="text",那么您将需要将纯文本编码为 HTML,这将为您提供:

<h1>Johnson &amp;amp; Johnson</h1>
于 2016-04-22T20:19:11.457 回答