2015-07-22 71 views
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

請建議如何去做。

+0

這將是更容易理解你的目標,如果你比你的文件結構中增加了預期的結果。 –

+0

我找到了解決方案。 ignoresXPathsRegex .add(「\\/doc \\ [1 \\] \\/tag \\ [1 \\] \\/file \\ [1 \\] \\/text()」);告訴只檢查第一個標籤。我們應該使用ignorableXPathsRegex .add(「\\/doc \\ [1 \\] \\/tag \\ [\\ d * \\] \\/file \\ [1 \\] \\/text( )「);忽略所有裏面的所有 user3540481

回答

0

我找到了解決方案。

ignorableXPathsRegex .add("\\/doc\[1\]\\/tag\[1\]\\/file\[1\]\\/text()"); 

告訴只檢查第一個標籤。

我們應該用

ignorableXPathsRegex .add("\\/doc\[1\]\\/tag\[\\d+\]\\/file\[1\]\\/text()"); 

忽略裏面所有的<file>所有<tag>