【问题标题】:Need to understand - why CDATA section is treated as if the <![CDATA[ and ]]>?需要了解 - 为什么 CDATA 部分被视为 <![CDATA[ and ]]>?
【发布时间】:2013-07-15 23:10:57
【问题描述】:

我正在阅读一本教科书来学习 XPath。我从那本书中找到了以下行:

XPath 如何处理 XML CDATA 部分中的文本? CDATA 部分中的每个字符都被视为字符数据。换句话说,CDATA 部分被视为好像 &lt;![CDATA[]]&gt; 已被删除,并且每次出现的标记(如 &amp;lt;&amp;amp;)都被相应的字符实体(如 &amp;lt;&amp;amp;)替换。

但是书中没有给出任何例子来解释上面的句子。任何人都可以帮助我理解作者在下面试图说什么:

CDATA 部分被视为好像删除了 &lt;![CDATA[]]&gt;,并且每次出现的标记(如 &amp;lt;&amp;amp;)都被相应的字符实体(如 &amp;lt; 和 @987654332)替换@.

【问题讨论】:

  • 这本书的排版可能很糟糕,有人撕掉了编码实体并放入了渲染后的等价物:CDATA 表示在 cdata 块内时,&amp;lt; 被视为&amp;lt;&amp;amp;&amp;amp;。例如xml 元字符失去了它们的“元性”。
  • 实际上是格式错误的问题。 :)
  • @JensErat 感谢您的编辑。我不知道为什么那部分被隐藏了:(
  • @Priti 这种情况经常发生。 Stackoverflow 使用 Markdown 来格式化帖子(无论如何我认为这是优越的),但也允许 HTML。这会导致很多丢失的 XML 输入,因为如果它们不是 HTML,浏览器会忽略它们......

标签: xpath


【解决方案1】:

我反过来想——&lt;![CDATA[ 和下一个]]&gt; 之间的所有内容都被视为文本,不受实体引用的通常解码,&lt; 符号不引入元素名字。所以

<something><![CDATA[<foo>text&more</foo>]]></something>

相同
<something>&lt;foo>text&amp;more&lt;/foo></something>

<something><foo>text&more</foo></something>

不是格式良好的 XML(因为 &amp; 被视为实体引用的开始,但没有相应的 ; 来结束它)。

【讨论】:

  • +1 很好的解释和例子(虽然我认为第一段可能比帮助更令人困惑)。我猜你是说你是根据 CDATA 中的文本没有被解析来考虑它的;正如书中描述的那样,这些东西在被解析之前就被转义了。我想我的想法和你一样,虽然这本书也是对的。
猜你喜欢
  • 2011-04-04
  • 2013-02-28
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2010-09-09
  • 2016-08-04
相关资源
最近更新 更多