2

到目前为止,我将文本放入 CDATA 标记中,并通过将文本拆分为多个相邻的 CDATA 来处理文本中出现 CDATA 结尾的可能性。

我不确定这一点,但 XML 解析器可能无法在 CDATA 标记内保留换行符,对吗?这也意味着以某种方式逃离他们......

我想使用 Perl 生成这些 XML 文件,并用 C++(使用 expat)、Java 和 C# 解析它们。

最重要的是,我希望生成的文件在某种程度上是人类可读/可修改的。有谁知道适合这些需求的任何编码方案?我正在使用它来存储数据库的数据,因此它需要接受任意文本,并在解析时返回完全相同的文本。

4

3 回答 3

1

xml 已经支持这一点,你不需要做任何特别的事情,你当然不需要使用 CDATA。只需使用一个像样的库,确保您使用的是 UTF-8 编码,并添加一个文本节点。如果某些东西“丢失”换行符,那么这是一个错误。xml 已经有一个相对人类可读的“编码”(转义)。它也是标准的,这使得它比发明自己的更有用。

参见,例如https://stackoverflow.com/a/1140802/181772

于 2012-03-07T21:33:42.220 回答
0

嗯,据我所知,CDATA 部分用于字符数据,控制字符不算在内。我认为这意味着在换行符的问题上,XML 解析器会判断它们是否是控制字符(从历史上看,是的,但实际上......不是。)。

虽然它会损害可读性,但您可以使用转义序列对换行符进行编码,假设您正确转义,解析应该正确转换它,您只需要在编码时记下它。

另一个完全违反“人类可读”要求的选项是对文本进行 base-64 编码,这允许您在 XML 中编码任意信息。

于 2012-03-07T21:28:43.537 回答
0

如果内容是 HTML,您可以对内容进行编码,例如:

<html>&lt;b&gt;Bold Text&lt;/b&gt;</html>

对比

<html><![CDATA[<b>Bold Text</b>]]></html>
于 2012-03-07T21:08:04.787 回答