3

私はしばらくこれを探しましたが、見つけられないようで、簡単なはずです。Transformer で作成している XML ファイルの末尾に CR を追加したいと考えています。方法はありますか>

私は次のことを試しましたが、これは空のファイルになりましたか?


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

明らかな答えは、Writer で StreamResult を使用し、閉じる前に文字をライターに追加することです。

ファイルを再度開いて文字を追加しようとしているようです。コンストラクターの 2 つの引数形式にFileOutputStreamは、追加フラグが含まれています。

于 2008-12-15T21:40:01.123 に答える
0

xml シリアライゼーションに使用したのと同じ文字エンコーディングを使用して改行文字を記述していることを確認してください。そうしないと、ファイルが破損します。

于 2008-12-16T02:11:48.063 に答える
0

この Transformer クラスを知りませんでした。しかし、あなたの writer/file 変数と xformer/source/result 変数の間に関係はありません...改行だけを書いているようです。
重要な部分を省略しない限り。

于 2008-12-15T21:32:07.957 に答える