代码之家  ›  专栏  ›  技术社区  ›  user1374266

在xml版本1.1的CDATA部分中跳过]]>

  •  0
  • user1374266  · 技术社区  · 12 年前

    我使用的是CDATA部分,但文本由一些字符组成,因此它被关闭,我得到了解析异常。

    <xyz><![CDATA[\..\..\\..\..\\..\..\\..\..\\..\..\\\boot.ini]]>&#0;</xyz>
    

    我在一些网站上找到了以下代码:

    // Add a CDATA section to the root element
    Element element = doc.getDocumentElement();
    CDATASection cdata = doc.createCDATASection("data");
    element.appendChild(cdata);
    
    // If "]]>" appears in the text, two CDATA sections will be written out
    cdata = doc.createCDATASection("more]]>data");
    element.appendChild(cdata);
    

    使用上述逻辑的问题是,我不知道从DB中读取的哪个元素将包含“]]>”,这样我就可以编写两个CDATA部分。

    需要你的帮助。

    2 回复  |  直到 12 年前
        1
  •  1
  •   Michael Kay    12 年前

    想象您只需添加 <![CDATA[ 在开始和 ]]> 最后。您需要首先检查数据是否包含 ]]> 。如果是,通常的补救方法是在第一个']'之后拆分,因此如果内容 A]]>B ,它被写为 <![CDATA[A]]]><![CDATA[]>B]]>

    避免这个问题的一个好方法是避免“手动”序列化XML,而是使用序列化库来完成这项工作。

        2
  •  0
  •   ChrisH    12 年前

    用CDATA部分转义任意文本很容易出错,因为它们无法嵌套。

    使用 entity references 改为转义文本。

    但是,如果您真的想使用CDATA部分, this section 维基百科页面的内容可能会有所帮助。