【问题标题】:CDATA not rendering properly ]]> appearing at the endCDATA 未正确呈现]]> 出现在最后
【发布时间】:2013-09-16 08:46:09
【问题描述】:

所以我试图渲染一些从 xml 服务返回的 CDATA。 返回的数据格式为:

   <Characteristic>
              <name>What to do what to say</ns32:name>
              <value>&lt;![CDATA[&lt;br&gt; Line1 &lt;/br&gt; Line2]]&gt;</value>
           <orderCharacteristic>

然后我使用以下代码在 ftl 文件中显示该值:

<#if Characteristic.name="What to do what to say">
    <#assign whatToSay=orderCharacteristic.value>
</#if>
${whatToSay}

通常应该显示为:

 Line1
 Line 2

但是,每当我尝试显示它的值时:

    Line1
    Line 2]]>

不知道为什么我最后会得到 ]]>,如果我删除它,xml 可以正常读取,并且消息也可以正确显示,但困扰我的是原因。

【问题讨论】:

  • 源 XML 是如何生成的?这是你可以控制的吗?

标签: html xml cdata


【解决方案1】:

因为写入 HTML 的内容是

<![CDATA[<br> Line1 </br> Line2]]>

HTML 不理解这样的 CDATA 块,因此将其解释为

<![CDATA[<br>   -- bogus comment
Line1           -- text
<br>            -- line break
Line2]]>        -- text

【讨论】:

  • 更准确地说,HTML 解析器无法识别 CDATA 部分,当文档以text/html 之类的内容类型提供时使用。当使用 XHTML 内容类型提供服务时,CDATA 部分会根据 XML 规范进行识别(但您会遇到旧版本的 IE 问题)。
  • 那么结束这一切的正确方法是什么。顺便说一句,Line2 和 ]]> 之间有一个空格。 HTML 是否将 ]]> 理解为 CDATA 的结束?
  • @Punkeshwar - CDATA 块在 HTML 中完全可以工作(或者正如 Jukka 正确所说的那样,HTML 解析器无法识别),其中包括 ]]&gt; 位。在将 CDATA 发送到浏览器之前,您需要找到一种方法以某种方式剥离 CDATA 的开始和结束。 (或者根据 Jukka 的评论使用 XHTML 媒体类型)
  • @Alohci 由于我无法控制它进来的 xml 标签,我认为在显示文本之前使用一些字符串控制会更好。谢谢大家
猜你喜欢
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多