xml ファイルを編集するメソッドがあります。メソッドの概要は次のとおりです。
public void process(Path anXmlFile) {
try {
anXmlFile= anXmlFile.normalize();
log.debug("processing {}",anXmlFile);
Document dom = buildDOM(anXmlFile.toFile());
//do stuff with dom...
//delete original file
//and finally ...
dom.normalize(); //so we get a more predictable order
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
Source source = new DOMSource(dom);
Result result = new StreamResult(anXmlFile.toFile());
transformer.transform(source, result);
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
私の問題は、特定の行で開き、次の行で閉じるxmlに複数行のコメントがある場合です(改行文字に注意してください):
<!-- this is a long comment[cr][lf]
that spans 2 lines -->
変更した DOM を書き出した後の結果は次のようになります。
<!-- this is a long comment[cr]
that spans 2 lines -->
問題は [cr][lf] が [cr] になってしまうことです。これは、このように影響を受ける xml の唯一の部分です。他のすべての行末は元のもの ([cr][lf]) と同じです - 私が変更したものも含めて (私のコードは DOM のコメント ノードを変更しません)。
これを回避するために、作成した Transformer に与えることができる構成オプションはありますか? これはすべてJDKクラスを使用して行われ、xmlライブラリは含まれません。