Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 选择以libxml2结尾的行_C++_C_Windows_Unix_Libxml2 - Fatal编程技术网

C++ 选择以libxml2结尾的行

C++ 选择以libxml2结尾的行,c++,c,windows,unix,libxml2,C++,C,Windows,Unix,Libxml2,我尝试在我们的服务器上生成一些xml文件(TMX) 服务器是Solaris SPARC服务器,但文件的目标是一些遗留的Windows CAT工具 CAT工具需要CR+LF行结束符,这是Windows上的默认设置。使用libxml2编写文件,使用xmlWriter非常简单,效果也非常好。但是我还没有找到一种方法来强制lib发出CR+LF,而不是Unix标准的LF。lib似乎只支持它所运行的平台的行尾 是否有人找到了一种方法来生成以另一行结尾的文件,而不是它所运行的平台的默认行。实际上,我的解决方法

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

服务器是Solaris SPARC服务器,但文件的目标是一些遗留的Windows CAT工具

CAT工具需要
CR+LF
行结束符,这是Windows上的默认设置。使用libxml2编写文件,使用
xmlWriter
非常简单,效果也非常好。但是我还没有找到一种方法来强制lib发出
CR+LF
,而不是Unix标准的
LF
。lib似乎只支持它所运行的平台的行尾


是否有人找到了一种方法来生成以另一行结尾的文件,而不是它所运行的平台的默认行。实际上,我的解决方法是打开已写入的文件,并使用一个简单的
C
循环编写一个新文件,其中的行结尾已更改。这是可行的,但在我们的链条中有这样一个不必要的步骤是令人恼火的

我自己也没有尝试过,但从中我可以看到两种可能性

  • :保存到缓冲区,转换为CR/LF并自己写出来
  • :在编写回调函数时,注册一个
    iowrite
    回调并转换为CF/LF
也许还有其他选择,但我还没有找到

CAT工具需要CR+LF线条端点,这是Windows上的默认设置

FWIW,这意味着CAT工具有一个损坏的XML解析器。它不应该关心这个,就像上面说的:

为了简化应用程序的任务,XML处理器必须像规范化所有换行符一样运行。。。通过将两个字符序列#xD#xA和任何不后跟#xA的#xD转换为单个#xA字符


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

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


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

毫无疑问,它已经坏了,但我无法更改它。这是一个大型组织,涉及大约5000个工作站。我只是翻译人员工作的一个组件的制作人。此外,我说的主要是CAT工具,但也有一些其他遗留组件会阻塞。如前所述,我们会一步一步地删除和更改,但需要很长时间才能修复所有问题。我问这个问题是为了去除至少一个积垢。谢谢你的建议。等我回来工作的时候我会试试的。我不想使用内存构建的结构(文件可能很大),因为我更喜欢
xmlWriter
对象的顺序触发和遗忘模式。谢谢,这就是我想的。不幸的是,该程序在后端的Solaris SPARC服务器上运行,并将用于Windows PC上的CAT工具。