単体テストに使用する関数を作成しています。XML ファイルを比較したいのですが、そのうちの 1 つがサード パーティのライブラリによって作成されるため、インデントの違いによる違いを軽減したいと考えています。したがって、次の関数を書きました。
private String normalizeXML(String xmlString) {
String res = xmlString.replaceAll("[ \t]+", " ");
// leading whitespaces are inconsistent in the resulting xmls.
res = res.replaceAll("^\\s+", "");
return res.trim();
}
ただし、この関数は XML の各行の先頭の間隔を削除していません。
このように関数を書くと(最初の正規表現の違い):
private String normalizeXMLs(String xmlString) {
String res = xmlString.replaceAll("\\s+", " ");
// leading whitespaces are inconsistent in the resulting xmls.
res = res.replaceAll("^\\s+", "");
return res.trim();
}
末尾の空白は削除されますが、xml が 1 行として表示されるため、違いを比較する必要がある場合に非常に厄介です。
最初の実装が先頭の間隔を置き換えない理由を正当化することはできません。何か案は?
編集:さらに興味深いのは、1行の操作を行う場合:
String res = xmlString.replaceAll("^\\s+", "");
この行は識別を削除しません!