Java-Saxon API-以“附加”模式写入文件

时间:2018-08-16 15:11:47

标签: java xquery saxon

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

我所拥有的例子:

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

sqc是StaticQueryContext。 “ true”是FileWriter构造函数使用附加模式的可选参数。

因此,正如我所说,它仍然在每个“ compileQuery”上重写文件。 我试图检查源,但对于我的水平来说确实太重了……

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

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

2 个答案:

答案 0 :(得分:0)

您正在使用非常古老的Saxon版本(不确定:“ Saxon 8”的范围可以是8.0到8.9,这是大约在2001年到2007年之间发布的序列;当前版本是9.8)。您还使用了一个非常老的API,该API在一定程度上仍受支持,但在后续发行版中进行了很大的更改,这意味着很难为您提供准确的建议。我强烈建议您继续使用Saxon 9.8,并使用为稳定而设计的s9api API,实践证明它非常稳定。

话虽如此,很难确切地知道这里出了什么问题。撒克逊人只是要将字符写到您提供的Writer中。它无法做任何其他事情。根据Java规范,您要提供的Writer可以将数据追加到文件中。一种可能是编写者在编写后没有被适当关闭,但是我们无法在如此旧的版本上调查这种可能性。

因此,我认为您应该尝试使用最新版的Saxon在简单而完整的独立程序中提供完整的repro;我们可以帮助您找到错误。

答案 1 :(得分:0)

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

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

现在我还有其他问题,但尚未了解api,我的xml对sax解析器无效(没有根节点...因为我从xquery附加根节点2次,解析器需要一个真实的根节点,但我会做到了;;-))。

再次感谢。