0

我正在使用 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 部分。

在这方面需要你的帮助。

4

2 回答 2

1

一个非常常见的错误是,您可以简单地通过<![CDATA[在开头和]]>结尾添加任意文本来将任意文本放入 CDATA 部分。您需要先检查数据是否包含]]>. 如果是这样,通常的补救措施是在第一个 ']' 之后将其拆分,因此如果内容是A]]>B,则将其写为<![CDATA[A]]]><![CDATA[]>B]]>.

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

于 2012-07-27T10:33:24.327 回答
0

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

改为使用实体引用来转义文本。

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

于 2012-07-27T05:31:03.210 回答