2017-06-04 55 views
1

我試圖編寫一個JUnit中的測試用例來比較兩個xml文件。使用xmlunit,我應該能夠找到所有的差異。但是在比較時,我總是得到false,儘管我給了類似的文件。每個xml文件的時間戳是不同的。所以,儘管xml文件中的所有其他內容都是相同的,但它返回false。請爲我提供處理此問題的適當方法。如何在junit中比較兩個xml文件時使用xmlunit忽略specfic xml元素

比較兩個xml文件時,我需要忽略xml文件中的timestamp標記。如何忽略自閉標籤?

<XML> 
<TIMESTAMP>KALA</TIMESTAMP> 
<B>JIHN</B> 
<C>Lion</C> 
</XML> 

<XML> 
<TIMESTAMP>QWER</TIMESTAMP> 
<B>JIHN</B> 
<C NAME =LION/> 
</XML> 
<B>JIHN</B> 
+0

在進行比較之前,您是否可以通過XSLT模板傳遞XML以去除所有不需要的部分? –

回答

0

XMLUnit測試2.X有NodeFilter S上的概念,使用您可以輕鬆地忽略TIMESTAMP元素。像

String control = "<XML>\n" 
    + "<TIMESTAMP>KALA</TIMESTAMP>\n" 
    + "<B>JIHN</B>\n" 
    + "<C>Lion</C>\n" 
    + "</XML>"; 
String test = "<XML>\n" 
    + "<TIMESTAMP>QWER</TIMESTAMP>\n" 
    + "<B>JIHN</B>\n" 
    + "<C NAME=\"LION\"/>\n" 
    + "</XML>"; 
Diff d = DiffBuilder.compare(Input.fromString(control)) 
    .withTest(Input.fromString(test)) 
    .withNodeFilter(n -> !(n instanceof Element && Nodes.getQName(n).getLocalPart().equals("TIMESTAMP"))) 
    .build(); 

可能是一個開始。

我不確定你的意思是自閉標籤。就XMLUnit而言,<x></x><x/>是相同的。您示例中的C元素顯然不是。第一個沒有屬性,但是嵌套文本,第二個具有名爲NAME的屬性,但沒有嵌套測試。

+0

我無法解開代碼。請詳細解釋如何在代碼中實現。當我爲TEST提供字符串時,出現錯誤。測試不接受字符串。「Diff d = DiffBuilder.compare(CONTROL).with(TEST)」。我想忽略時間戳以外的xml文件的兩個不同元素。等待你的幫助。在此先感謝 – Teena

+0

@Teena我編輯了帖子以包含您的完整示例而不是佔位符(並且通過在'NAME'屬性的值周圍添加引號並省略第二個'B'來使第二個示例格式良好的XML)。代碼編譯,如果你運行它'd'不會包含任何關於'TIMESTAMP'的差異。 –

+0

感謝您的幫助。這很有幫助。還有一個添加到這個我想忽略多個標籤,我怎麼能做到這一點?其結果也是一樣的。我怎樣才能打印其他的差異 – Teena

相關問題