【问题标题】:Java - Saxon API - Write to file in "append" modeJava - Saxon API - 以“追加”模式写入文件
【发布时间】:2018-08-16 15:11:47
【问题描述】:

我正在使用 Saxon 8 来解析 XQuery 并分析 API 返回的 xml 文件。 问题是传入参数的 FileWriter 总是在“覆盖”模式下使用,即使构造函数使用的是 true 参数。

我所拥有的示例:

sqc.compileQuery(new FileReader(xq.getCurrentXQueryFile())).run(dqc, new StreamResult(new FileWriter(xq.getResultsFile(), true)), props);

sqc 是一个静态查询上下文。 "true" 是 FileWriter 构造函数使用附加模式的可选参数。

所以正如我所说,它仍然会在每个“compileQuery”上重写文件。 我试着查了一下来源,但对我的水平来说实在是太重了……

因此,如果有人知道是否有一种“干净”的方法可以在单个文件中获得多个结果,谢谢! :-)

PS:我知道每次启动创建一个文件然后在一个文件中获取所有文件的内容很容易,但这不是我所说的“干净”。

【问题讨论】:

  • new FileOutputStream(xq.getResultsFile(), true) 对于字符集编码会更好。关于错误:尝试用一些静态文件替换xq.getResulsFile(),看看会发生什么。

标签: java xquery saxon


【解决方案1】:

您使用的是非常古老的 Saxon 版本(不确定是哪个版本:“Saxon 8”可能是 8.0 到 8.9 之间的任何版本,这是 2001 到 2007 年间发布的一系列版本;当前版本是 9.8)。您还使用了一个非常旧的 API,它在一定程度上仍受支持,但在后续版本中发生了相当大的变化,这意味着很难为您提供准确的建议。我强烈建议您继续使用 Saxon 9.8 并使用 s9api API,该 API 专为稳定性而设计,并在实践中证明非常稳定。

话虽如此,但很难确切地看出这里出了什么问题。 Saxon 只是将字符写入您提供的 Writer;它没有办法做任何其他事情。您提供的 Writer 是根据 Java 规范将数据附加到文件中的。一种可能性是编写器在编写后没有正确关闭,但我们无法在这么旧的版本上调查这种可能性。

所以我认为你应该尝试在一个简单而完整的独立程序中使用最新版本的 Saxon 提供完整的重现;我们可以帮助您找到错误。

【讨论】:

    【解决方案2】:

    实际上是 Saxon 9 HE 而不是 8,我发现了问题所在。 在附加模式下,标签“

    props.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    

    现在我有其他问题,但与 api 无关,我的 xml 对 sax 解析器无效(没有根节点......因为我从 xquery 追加根节点 2 次解析器想要一个真正的根节点,但我会管理那个。;-))。

    再次感谢。

    【讨论】:

    猜你喜欢
    • 2011-06-14
    • 2016-10-21
    • 2019-06-10
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多