【问题标题】:Choosing line ending with libxml2选择以 libxml2 结尾的行
【发布时间】:2012-12-16 21:00:01
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ c windows unix libxml2


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这就是我想的。不幸的是,该程序在后端的 Solaris-SPARC 服务器上运行,并且注定是 Windows PC 上的 CAT-Tool。
    【解决方案2】:

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

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

    为了简化应用程序的任务,XML 处理器必须表现得好像它规范了所有换行符......通过翻译两个字符序列 #xD #xA 和任何 #xD后面不跟 #xA 到单个 #xA 字符。

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

    【讨论】:

    • 它坏了,毫无疑问,但我无法改变它。这是一个大型组织,涉及大约 5000 个工作站。我只是翻译人员使用的组件之一的生产者。此外,我主要说的是 CAT 工具,但还有一些其他遗留组件会令人窒息。如前所述,我们会逐步删除和更改,但需要很长时间才能解决所有问题。我问这个问题是为了消除我们所拥有的至少一个步骤。
    【解决方案3】:

    这个我自己没试过,但是从xmlsave,我可以看出两种可能

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

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

    【讨论】:

    • 感谢您的建议。当我回来工作时,我会尝试。我想避免使用内存构建结构(文件可能很大),因为我更喜欢xmlWriter 对象的顺序触发和忘记模式。
    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2023-04-07
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多