解析Atom XML提要时,应该如何处理冲突的CDATA和实体转义元素?
Atom提要解析器应该如何处理提要中的以下XML行:解析Atom XML提要时,应该如何处理冲突的CDATA和实体转义元素?,xml,feed,cdata,atom-feed,xml-encoding,Xml,Feed,Cdata,Atom Feed,Xml Encoding,Atom提要解析器应该如何处理提要中的以下XML行: <title type="html"><![CDATA[Johnson & Johnson]]></title> 为了便于讨论,让我们假设最初预期的文本实际上是强生公司。我在这个问题上遇到了这个问题,似乎有两种不同的观点: 。文本“Johnson&Johnson”已被实体转义,然后通过包装在CDATA节中再次编码。他指出,一个行为良好的xml解析器将返回Johnson&;John
<title type="html"><![CDATA[Johnson & Johnson]]></title>
为了便于讨论,让我们假设最初预期的文本实际上是强生公司。我在这个问题上遇到了这个问题,似乎有两种不同的观点:
Johnson&;Johnson
,因为这是处理状态CDATA编码数据的方式type=“html”
的元素都包含实体转义html。因此,我们应该可以自由地解码它Johnson&Johnson
或Johnson&;约翰逊
考虑到这种特殊情况 CDATA是字符数据-被解析器完全忽略。它必须是,因为xml不能处理&。因此,不存在“双重编码”——任何解析器都会跳过close标记,忽略两者之间的任何内容。我没有遇到过允许实际嵌套(嵌入完整CDATA打开和关闭标记)的解析器。CDATA标记之间的内容没有针对标记实体进行解析,因此文本节点的解析值为Johnson&;约翰逊
请注意,该属性表示type=“html”
,因此应将其解析为html
e、 g.如果您将其表达为网页,您可以写:
<h1>Johnson & Johnson</h1>
两种观点都是正确的:
- 编码为文本的标题为
Johnson&Johnson
- 编码为HTML的标题是
Johnson&;约翰逊
- 在XML中编码为HTML的标题是
type=“html”
元素)在没有CDATA的情况下会对其元素的文本进行html解码,您是否认为它也应该对包装在CDATA中的元素文本进行html解码?如果Atom库(通常用于type=“html”)不应该,HTML呈现程序应该这样做。为什么提要解析器库不应该将标记为type=“HTML”
的元素作为转义元素,而规范明确指出它们是转义的?当您要求Python的feedparser
库或PHP的Simplepie
库从标题定义为:Example ptitle/p
的提要返回标题时,它们都将返回ExampleTitle。这个问题围绕着CDATA元素是否应该绕过将数据解析为未跳过形式时所做的典型未跳过操作。@mmcdole-在该示例中,HTML只是使用实体而不是CDATA进行编码。所以是的,CDATA应该被视为CDATA。
<h1>Johnson &amp; Johnson</h1>