4

XML 规范声明这必须是处理任何“外部解析实体”的行为。但这也适用于元素内部的 CDATA 部分?为什么?有没有办法通过在解析器代码中添加 1/2 条件而不是更改\r

4

2 回答 2

2

情况确实如此。为什么?这是为了简化将处理 XML 文件输出的应用程序的生命周期——它们根本不需要担心换行符的格式,增加了应用程序的兼容性(考虑 Linux 和 Windows 之间简单文本编辑器的兼容性——它们几乎总是错误地显示文件,在 Windows 中最常见的是单行)。

当然,如果您出于任何原因需要未转换的 \r,则采用任何现有的 XML 解析器实现并对其进行修改是很简单的。在 tinyxml 中,您需要修改 TiXmlBase::ReadText() 函数,或者您可以获取它的旧版本,因为它曾经保持空白不变。

另一方面,从设计的角度来看,通过字符替换功能运行解析器输出并将所有“\n”替换为“\r\n”会更简洁。

当然,最好的办法是按原样使用输出,现在我无法想象任何需要这样做的场景。

于 2012-11-04T19:39:08.100 回答
1

CDATA 没有被命名为字符数据。处理您的情况的唯一优雅方法是编码为 Base64。

Base64 将所有 255 个可能的字符编码为 64 个可打印字符。在 64 个选项中获得 255 种可能性会使文本更大一些,但这将是您唯一的选择,除了将您的 XML 布局更改为类似

<TEXT>
  <CHAR>13</CHAR>
  <CHAR>255</CHAR>
</TEXT>

但在我看来,这比&#13;你现在得到的更糟糕。

http://www.ibm.com/developerworks/xml/library/x-cdata/ 访问此站点以获取有关在 XML 中处理二进制数据的更多信息。

希望它可以帮助你。

于 2012-11-05T13:46:55.223 回答