XMLファイル(存在する場合はファイルを作成しない場合)を読み込み、タグをいくつか変更してxmlを書き戻す必要があります。私はJava Dom4j SAXReaderとXMLWriterの結果が複数改行になる
InputStream in = new FileInputStream(userFile);
SAXReader reader = new SAXReader();
Document document = reader.read(in);
Element root = document.getRootElement();
...
でこれを行うと、問題は、それぞれの書き戻した後、一つの追加の改行が作成されること、である
FileUtils.writeByteArrayToFile(userFile, getFormatedXML(document).getBytes());
...
private String getFormatedXML(Document doc) {
try {
String encoding = doc.getXMLEncoding();
if (encoding == null)
encoding = "UTF-8";
Writer osw = new StringWriter();
OutputFormat opf = new OutputFormat(" ", true, encoding);
XMLWriter writer = new XMLWriter(osw, opf);
writer.write(doc);
writer.close();
return osw.toString();
} catch (IOException e) {
}
return "ERROR";
}
に戻って書いています。 outputFormatの引数をtrueからfalseに切り替えると、改行はまったく書き込まれません。
この問題を回避する簡単な方法はありますか?
TransformerFactory transfac = TransformerFactory.newInstance();
transfac.setAttribute("indent-number", 2);
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.INDENT, "yes");
trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
trans.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
Result result = new StreamResult(System.out);
trans.transform(new DomSource(document), result);
代わりのSystem.out
、あなたの先のファイルのためのFileOutputStream
を使用します。
どうもありがとう Hauke
ありがとうございました。それははるかに良く働いています。しかし、正しく動作させるためには、2つのことを変更する必要がありました。 1)transfac.setAttribute( "indent-number"、new Integer(2)); - >私はそれを削除する必要があったため、私はIllegalArgumentExceptionを持っています:サポートされていません 2)trans.transform(新しいDocumentSource(document)、result); - > DomSourceオブジェクトは私のクラスパスにはありませんでしたが、DocumentSourceはありました。たぶん私は別のバージョンを使用しています。 ありがとうございました! – Hauke