3

我用谷歌搜索了一段时间,但似乎找不到它,应该很容易。我想将 CR 附加到我使用 Transformer 创建的 XML 文件的末尾。有没有办法做到这一点>

我尝试了以下方法,但这导致了一个空白文件?


Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "file:///ReportWiz.dtd");
xformer.transform(source, result);
OutputStream writer = new FileOutputStream(file);
Byte b = '\n';
writer.write(b);
writer.close();
4

5 回答 5

9

简单...只需添加附加选项:

    new FileOutputStream(f, true /* append */);
于 2008-12-15T21:42:40.247 回答
5

这里有几个选项。

我假设您的结果是您使用指定目标文件路径StreamResult创建的结果。String你可以考虑打开一个FileOutputStream你自己,并用它来构建你StreamResult的。然后,当转换器完成后,附加行终止符,刷新并关闭流。在没有其他限制的情况下,我会使用这种方法。

如果要重新打开文件,如问题所示,则需要使用带有FileOutputStream可选append参数的构造函数。将此设置true为避免破坏刚刚完成的转换结果。

您还可以探索indent在转换中设置输出属性,或者直接在模板中包含必要的行终止符。

于 2008-12-15T21:42:03.633 回答
1

显而易见的答案是将 StreamResult 与 Writer 一起使用,并在关闭之前将您的角色附加到 writer。

您似乎正在尝试重新打开文件以附加字符。构造函数的两种参数形式FileOutputStream包括一个附加标志。

于 2008-12-15T21:40:01.123 回答
0

我不知道这个 Transformer 类。但是我发现您的编写器/文件变量和您的 xformer/source/result 变量之间没有任何联系......看起来您只写了一个换行符。
除非你省略了一些重要的部分。

于 2008-12-15T21:32:07.957 回答
0

请注意,请确保您使用与用于 xml 序列化的相同字符编码来编写换行符,否则您的文件将被破坏。

于 2008-12-16T02:11:48.063 回答