Java EEアプリケーションで、自動生成された2つの大きなXMLを比較する必要がある場合があります。両方のXML(タグと値)が等しいかどうかを確認する必要があります。
を使ってみXMLUnit
ましたが、タグの間にスペースがあっても返されるようなものですfalse
(これらのXMLは正しく自動生成されます!)。これを行う、または独自のロジックを書き留める効果的な方法はありますか?
Java EEアプリケーションで、自動生成された2つの大きなXMLを比較する必要がある場合があります。両方のXML(タグと値)が等しいかどうかを確認する必要があります。
を使ってみXMLUnit
ましたが、タグの間にスペースがあっても返されるようなものですfalse
(これらのXMLは正しく自動生成されます!)。これを行う、または独自のロジックを書き留める効果的な方法はありますか?
StAXをお勧めします。大きなファイルで作業するのが最善です。これはこのような何かかもしれません
private boolean compare(XMLEventReader xr1, XMLEventReader xr2) throws XMLStreamException {
for (;;) {
XMLEvent e1 = nextTag(xr1);
XMLEvent e2 = nextTag(xr2);
if (e1 == null || e2 == null) {
return e1 == e2;
}
if (!equals(e1, e2)) {
return false;
}
}
}
private static XMLEvent nextTag(XMLEventReader xr) throws XMLStreamException {
while (xr.hasNext()) {
XMLEvent e = xr.nextEvent();
if (e.getEventType() == XMLStreamConstants.START_ELEMENT) {
return e;
}
}
return null;
}
private boolean equals(XMLEvent e1, XMLEvent e2) {
// compare attributes and content
return false;
}
組み込みのdiffツールを備えたエディターを使用できます。私はnetbeansエディタを使用してファイルを比較します。早くて簡単だと思います。
jaxbを使用して解析し、xmlをPOJOに変換します
上記のPOJOにobject.equals()を実装します
次に、コンパレータを使用して解析されたオブジェクトを比較します