选择以libxml2结尾的行

时间:2013-01-02 13:29:31

标签: c++ c windows unix libxml2

我尝试在服务器上生成一些xml文件(TMX)。

服务器是Solaris SPARC服务器,但文件的目标是一些传统的Windows CAT工具。

CAT-Tool需要CR+LF行结尾,这是Windows上的默认行。使用xmlWriter使用libxml2编写文件很简单,并且运行良好。但我还没有找到一种方法来强制lib发出CR+LF而不是Unix标准LF。 lib似乎只支持它运行的平台的行结尾。

有人找到了一种生成文件的方法,其中另一行的结尾超过了它运行的平台的默认值。实际上我的解决方法是打开写入的文件并使用简单的C循环编写一个更改的行结尾的新文件。这是有效的,但在我们的链中有这样一个不必要的步骤是很烦人的。

3 个答案:

答案 0 :(得分:2)

我自己没有尝试过,但是从xmlsave开始,我可以看到两种可能性

  • xmlSaveToBuffer:保存到缓冲区,转换为CR / LF并自行写出来。
  • xmlSaveToIO:在回调函数中写入时注册iowrite回调并转换为CF / LF

也许,还有其他选择,但我还没有找到它们。

答案 1 :(得分:2)

  

CAT-Tool需要CR + LF行结尾,这是Windows上的默认行。

FWIW,这意味着CAT-Tool有一个破碎的XML解析器。它不应该关心这一点,正如the the XML spec所说:

  

为了简化应用程序的任务,XML处理器必须的行为就好像它规范了所有换行符......通过翻译双字符序列#xD #xA和任何#xD来表示#xA后面没有一个#xA字符。

我经常知道这些事情是我们无法控制的,但如果您可以依靠CAT-Tool供应商来修复他们的软件,它可能会成为一个更具前瞻性的解决方案。

答案 2 :(得分:1)

根据源代码(截至2013年4月),libxml2只是将“\ n”放入输出流中。至少,在编写文档的dtd-part时。因此,动态重新编码流是获得“\ r \ n”结果的唯一选择。

如果你很幸运(和我一样)并且你的工具在Windows上运行,你可以在文本模式下打开文件,操作系统会为你重新编码。