Atom订阅源解析器应如何处理订阅源中的以下XML行:
<title type="html"><![CDATA[Johnson & Johnson]]></title>
为了便于讨论,我们假设最初预期的文本实际上是Johnson & Johnson
。我遇到了关于这个问题的online discussion,似乎有两种不同的观点:
Opinion #1 - claims that this content is double-encoded。文本“Johnson&amp; Johnson”文本已被实体转义,然后通过包装在CDATA部分中再次编码。他声明一个表现良好的xml解析器将返回Johnson & Johnson
,因为这是XML spec状态CDATA编码数据的处理方式。
Opinion #2 - claims that the Atom spec takes precedent。他声称CDATA是一个传播途径。 Johnson & Johnson
以Johnson & Johnson
出现。如果这只是一个XML文档,它将在那里结束。但是,因为它是Atom,我们必须查看Atom spec以确定正确的行为。原子规范声明任何带有type="html"
的元素都包含实体转义的html。因此,我们应该可以自由解码。
其中哪一项事实上是正确的?应该使用适当的Atom XML解析器:
考虑到这种特殊情况,Johnson & Johnson
或Johnson & Johnson
?
答案 0 :(得分:1)
两种观点都是正确的:
Johnson & Johnson
。Johnson & Johnson
<![CDATA[Johnson & Johnson]]>
答案 1 :(得分:0)
CDATA是字符数据 - 解析器之间完全忽略。它必须是因为xml无法处理&amp ;.因此,没有“双重编码” - 任何解析器都会跳转到关闭标记,忽略它们之间的任何内容。我没有遇到允许实际嵌套的解析器(嵌入的完整CDATA打开和关闭标签)。
答案 2 :(得分:0)
不会为标记实体解析CDATA标记之间的内容,因此文本节点的解析值为Johnson & Johnson
。
请注意,该属性显示为type="html"
,因此应将其解析为HTML。
e.g。如果您将此表示为网页,则可以写下:
<h1>Johnson & Johnson</h1>
如果它已经说过type="text"
那么你需要将纯文本编码为HTML,它会给你:
<h1>Johnson &amp; Johnson</h1>