1
我有一個如下所示的XML文件。在使用xmlUnit進行比較時忽略多個標籤
預期的XML
<doc>
<tag>
<file>a.c</file>
<line>10</line>
<type>c</type>
<tag>
<tag>
<file>b.h</file>
<line>14</line>
<type>h</type>
<tag>
<tag>
<file>d.he</file>
<line>49</line>
<type>he</type>
<tag>
</doc>
現在XML測試
<doc>
<tag>
<file>a1.c</file>
<line>10</line>
<type>c</type>
<tag>
<tag>
<file>b1.h</file>
<line>14</line>
<type>h</type>
<tag>
<tag>
<file>d1.he</file>
<line>49</line>
<type>he</type>
<tag>
</doc>
我想比較具有相同結構的另一個XML文件,該文件。
我正在使用xmlUnit進行比較。雖然我比較想忽略XML標籤<file>
下面是我寫的
public static Diff compareXML(String expXMLPath, String genXMLPath)
throws IOException, SAXException {
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreAttributeOrder(true);
final List<String> ignorableXPathsRegex = new ArrayList<String>();// list of regular expressions that custom difference listener used during xml
//comparison
ignorableXPathsRegex
.add("\\/doc\\[1\\]\\/tag\\[1\\]\\/file\\[1\\]\\/text()");
Diff diff = null;
try(FileInputStream fileStream1 = new FileInputStream(expXMLPath)) {
try(FileInputStream fileStream2 = new FileInputStream(genXMLPath)) {
InputSource inputSource1 = new InputSource(fileStream1);
InputSource inputSource2 = new InputSource(fileStream2);
diff = new Diff(inputSource1, inputSource2);
RegDiffListener ignorableElementsListener = new RegDiffListener(
ignorableXPathsRegex);
diff.overrideDifferenceListener(ignorableElementsListener);
return diff;
}
}
}
此,如果XML文件有一個以上的<tag>...</tag>
塊不工作比較代碼。基本上,我需要在這裏正則表達式而忽略所有<file>
標籤,它正在<doc><tag>
我想預期和測試XML的比較表明,無論是忽略文件變量的值相同,所以diff.similar()
應該返回true
請建議如何去做。
這將是更容易理解你的目標,如果你比你的文件結構中增加了預期的結果。 –
我找到了解決方案。 ignoresXPathsRegex .add(「\\/doc \\ [1 \\] \\/tag \\ [1 \\] \\/file \\ [1 \\] \\/text()」);告訴只檢查第一個標籤。我們應該使用ignorableXPathsRegex .add(「\\/doc \\ [1 \\] \\/tag \\ [\\ d * \\] \\/file \\ [1 \\] \\/text( )「);忽略所有裏面的所有 –
user3540481