0

JDom 2.0.5 を使用して xml を変更しています。また、正しく変更されたかどうかを確認する Junit テスト ケースもあります。これには、入力 xml、テスト用のメソッド (変換 xml)、および新しい xml (結果) があります。後で、出力を最終結果となるファイルと比較します。

FileUtils.contentEquals(newXml, modelXml);

しかし、すべての終了タグは JDom によって自動的に変更されるため、これは常に false です。変更できない要件であるため、モデルを変更できません。

Input: <properties/>
Output: <properties />    --> should be as input:: <properties/>

JDom がこのタグを変更しないようにするにはどうすればよいでしょうか?

SAXBuilder builder = new SAXBuilder();
Document doc = (Document) builder.build(xmlFile);

// Add, remove some elements ...

XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, new FileWriter(newXml, false));
4

2 に答える 2

-1

ここでの「変更」は実際には完全に有効です。余分なスペースがあっても、XML の意味に違いはありません。

(別の言い方をすれば、JDom データ構造は、ソース タグ内の意味のない空白の有無をエンコードしません。したがって、JDom は、出力 XML をフォーマットするときに、入力 XML の空白を再現できません。)


本当の問題は、あなたの期待が間違っていることです。XML ドキュメントを文字シーケンスであるかのように確実に比較することはできません。

Java で XML を比較するさまざまな正しい方法については、この Q&A をお読みください。

于 2014-07-21T09:28:18.737 に答える