Я новичок в этой области, и ему было поручено сложное задание.
У меня есть 2 XML-файла (а именно Test1 и Test 2, как указано ниже). И мне нужно сравнить эти xml-файлы с использованием java и вернуть логическое значение как true, если нет различий. И проблема здесь заключается во втором Xml-файле (Test2.xml), порядок элементов всегда перемешан. Я попытался использовать XMLUnit2 для сравнения двух строк XML, но он не работает, если есть несколько родительских узлов или большой XML.
Test1.Xml:
Test1.Xml:
<PACKINGS>
<PACKING>
<TYPE>CCST</TYPE>
<ORDERNUM>810000510</ORDERNUM>
<SVCTAGS>
<SVCTAG>
<SVCTAGTYPE>DRAGON</SVCTAGTYPE>
<SVCTAGNUMBER>768100005105001</SVCTAGNUMBER>
<TIENUMBER>1</TIENUMBER>
<BOXID>768100005105001</BOXID>
<LENGTH>4</LENGTH>
<WIDTH>5</WIDTH>
<HEIGHT>10</HEIGHT>
<PARTS>
<PART>
<PARTNUMBER>RKH5D</PARTNUMBER>
<PARTQTY>10</PARTQTY>
</PART>
</PARTS>
</SVCTAG>
<SVCTAG>
<SVCTAGTYPE>DRAGON</SVCTAGTYPE>
<SVCTAGNUMBER>768100005105002</SVCTAGNUMBER>
<TIENUMBER>2</TIENUMBER>
<BOXID>768100005105002</BOXID>
<LENGTH>4</LENGTH>
<WIDTH>5</WIDTH>
<HEIGHT>10</HEIGHT>
<PARTS>
<PART>
<PARTNUMBER>FHMTN</PARTNUMBER>
<PARTQTY>10</PARTQTY>
</PART>
</PARTS>
</SVCTAG>
</SVCTAGS>
</PACKING>
</PACKINGS>
Test2.Xml:
<PACKINGS>
<PACKING>
<TYPE>CCST</TYPE>
<ORDERNUM>810000510</ORDERNUM>
<SVCTAGS>
<SVCTAG>
<SVCTAGTYPE>DRAGON</SVCTAGTYPE>
<SVCTAGNUMBER>768100005105002</SVCTAGNUMBER>
<TIENUMBER>2</TIENUMBER>
<BOXID>768100005105002</BOXID>
<LENGTH>4</LENGTH>
<WIDTH>5</WIDTH>
<HEIGHT>10</HEIGHT>
<PARTS>
<PART>
<PARTNUMBER>FHMTN</PARTNUMBER>
<PARTQTY>10</PARTQTY>
</PART>
</PARTS>
</SVCTAG>
<SVCTAG>
<SVCTAGTYPE>DRAGON</SVCTAGTYPE>
<SVCTAGNUMBER>768100005105001</SVCTAGNUMBER>
<TIENUMBER>1</TIENUMBER>
<BOXID>768100005105001</BOXID>
<LENGTH>4</LENGTH>
<WIDTH>5</WIDTH>
<HEIGHT>10</HEIGHT>
<PARTS>
<PART>
<PARTNUMBER>RKH5D</PARTNUMBER>
<PARTQTY>10</PARTQTY>
</PART>
</PARTS>
</SVCTAG>
</SVCTAGS>
</PACKING>
</PACKINGS>
Ниже приведен код, который я пробовал, но он не работает с использованием модуля xml:
package com.com.java;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.*;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.XMLAssert;
import org.testng.annotations.Test;
import org.xmlunit.builder.DiffBuilder;
import org.xmlunit.builder.Input;
import org.xmlunit.diff.DefaultNodeMatcher;
import org.xmlunit.diff.ElementSelectors;
import org.xmlunit.matchers.CompareMatcher;
public class TestNg {
@Test
public void testXmlUnit() {
String ControlXML = "<PACKINGS><PACKING><TYPE>CCST</TYPE><ORDERNUM>810000510</ORDERNUM><SVCTAGS><SVCTAG><SVCTAGTYPE>DRAGON</SVCTAGTYPE><SVCTAGNUMBER>768100005105002</SVCTAGNUMBER><TIENUMBER>2</TIENUMBER><BOXID>768100005105002</BOXID><LENGTH>4</LENGTH><WIDTH>5</WIDTH><HEIGHT>10</HEIGHT></SVCTAG><SVCTAG><SVCTAGTYPE>DRAGON</SVCTAGTYPE><SVCTAGNUMBER>768100005105001</SVCTAGNUMBER><TIENUMBER>1</TIENUMBER><BOXID>768100005105001</BOXID><LENGTH>4</LENGTH><WIDTH>5</WIDTH><HEIGHT>10</HEIGHT><PARTS><PART><PARTNUMBER>RKH5D</PARTNUMBER><PARTQTY>10</PARTQTY></PART></PARTS></SVCTAG></SVCTAGS></PACKING></PACKINGS>";
String testXml = "<PACKINGS><PACKING><TYPE>CCST</TYPE><ORDERNUM>810000510</ORDERNUM><SVCTAGS><SVCTAG><SVCTAGTYPE>DRAGON</SVCTAGTYPE><SVCTAGNUMBER>768100005105001</SVCTAGNUMBER><TIENUMBER>1</TIENUMBER><BOXID>768100005105001</BOXID><LENGTH>4</LENGTH><WIDTH>5</WIDTH><HEIGHT>10</HEIGHT></SVCTAG><SVCTAG><SVCTAGTYPE>DRAGON</SVCTAGTYPE><SVCTAGNUMBER>768100005105002</SVCTAGNUMBER><TIENUMBER>2</TIENUMBER><BOXID>768100005105002</BOXID><LENGTH>4</LENGTH><WIDTH>5</WIDTH><HEIGHT>10</HEIGHT><PARTS><PART><PARTNUMBER>FHMTN</PARTNUMBER><PARTQTY>10</PARTQTY></PART></PARTS></SVCTAG></SVCTAGS></PACKING></PACKINGS>";
assertThat(testXml, CompareMatcher.isSimilarTo(ControlXML).ignoreWhitespace().normalizeWhitespace().withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndText, ElementSelectors.byName)));
}
}