以人类可读的方式将任意文本编码为XML的好方法是什么?

时间:2012-03-07 21:00:51

标签: xml perl expat-parser

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

我不确定这一点,但XML解析器无法保留CDATA标签内的换行符,对吗?这也意味着以某种方式逃避它们......

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

VS

<html><![CDATA[<b>Bold Text</b>]]></html>

答案 2 :(得分:0)

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

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

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