正常的<>不用转义就可以放到xml节点中
如<a><![CDATA[<b>abc</b>]]></a>
这样格式是正确的
但是如果b节点中也有<![CDATA[]]>该怎么办呢
如下面这样<a><![CDATA[<b><![CDATA[abc]]></b>]]></a>
就会是格式错误,有什么方法解决么?
难道只能用把><这些转成&it;一类的方法来解决吗

解决方案 »

  1.   

    CDATA(Character Data)里面,都是以数据形式存储的。
    <a><![CDATA[<b><![CDATA[abc]]></b>]]></a>
    CDATA里面就不要用CDATA了,没什么意义
      

  2.   

    对,只能进行转换解决
    安全的方法<![CDATA[abc]]></b>]]>
    存xmlencode之后的代码
      

  3.   

    其实主要是这样的
    我前台通常是发一个查询参数到后台,然后后台根据参数查出数据后将数据打成xml格式返回
    如:"a"表中的"a_a"字段里的数据是"abc""<>#$%"""(注意这个字段里的数据可以是html代码的,当然也会出现我上面说的那个<b><![CDATA[abc]]></b>)
    然后返回前台得到的实际数据是xml格式字符串:
    如下:<a><a_a><![CDATA[abc""<>#$%""]]></a_a></a>
    为了方便,并没有把像引号和尖括号这样一类的特殊字符做转义处理,而是用CDATA这个方法来解决,然后现在遇到问题了,就是当字段中存在像CDATA这种xml字符串时,或者确切的说是有"]]>"时就会截断标签,那么按两位的说法来看就只能把数据中的>做转义处理了,如此以来拼xml返回前台时就不回出错,而转回来就只能在前台得到后用js来转回来。或者说是我的数据库设计就有问题,不应该这样存数据。我还有好多页面的布局一类的html代码(如页头页尾)是直接放在xml文件里,然后js去读取写到html里凑成页面,呃,或者是读到xml类型数据再和xslt合并出页面。总之就是xml里的特殊字符实在让我头痛感谢楼上两位的回复
      

  4.   

    在網路上有找到另一個方法以"]]]]><![CDATA[>"替換原本的"]]>"內容原文解說如下:
    It basically closes the current CDATA section and opens a new one, deconstructing the "unwanted termination tag" into ]] and > and putting them in the separate sections."]]><![CDATA["可中斷原本的CDATA的註解,以樓主的情形來說,
    可改成<a><![CDATA[<b><![]]><![CDATA[CDATA[abc]]]]><![CDATA[></b>]]></a>
    雖然有點難辨識,但我試過的確可行!
    參考來源https://github.com/symphonycms/symphony-2/pull/69