XML规范声明这必须是处理任何“外部解析实体”的行为。但这也适用于元素内部的CDATA部分?为什么?
有没有办法通过在解析器代码中添加1/2条件来转换\ r \ n而不是将\r
更改为
答案 0 :(得分:2)
情况确实如此。为什么?它是为了简化处理XML文件输出的应用程序的生命周期 - 他们根本不需要担心换行符的格式,增加应用程序兼容性(考虑Linux和Windows之间简单文本编辑器的兼容性 - 它们几乎总是错误地显示文件,在Windows中最常见的是单行。
当然,如果您出于任何原因要求\ r \ n未转换,则可以使用任何现有的XML解析器实现并对其进行修改。在tinyxml中,你需要修改TiXmlBase :: ReadText()函数,或者你可以获取它的旧版本,因为它用于保持空白不变。
另一方面,从设计的角度来看,通过字符替换功能运行解析器输出并将所有“\ n”替换为“\ r \ n”将更加清晰。
当然最好只是按原样使用输出,现在我无法想象任何需要这样做的情况。
答案 1 :(得分:1)
CDATA没有任何名称的字符数据。处理你情况的唯一优雅方法是编码为Base64。
Base64以64个可打印字符编码所有255个可能的字符。 要在64个选项中获得255种可能性,文本会更大一些,但除了将XML布局更改为
之外,这将是您唯一的选择。<TEXT>
<CHAR>13</CHAR>
<CHAR>255</CHAR>
</TEXT>
但在我看来,这比你现在得到的
更糟糕。
http://www.ibm.com/developerworks/xml/library/x-cdata/ 有关处理XML中二进制数据的更多信息,请访问此站点。
希望它对你有所帮助。