2012-01-20 39 views
0

JDK 1.7.0 XMLUnit測試1.3使用XMLUnit(Java)來比較兩種含實體XML字符串

當比較該控制XML字符串:

  String controlXml = "" + 
       "<client>" + 
       " <name>Hello&nbsp;World</name>" + 
       "</client>"; 

有了這個測試XML字符串:

  String testXml = "" + 
       "<client>" + 
       " <name>Hello&nbsp;World</name>" + 
       "</client>"; 

XMLUNIT返回false,我期待它返回true(沒有差異)。

這裏是我的用法:

XMLUnit.setIgnoreComments(true); 
XMLUnit.setIgnoreWhitespace(true); 
Diff diff = new Diff(controlXml,testXml); 
boolean result = diff.similar(); //result is false 

我也得到在控制檯窗口中出現以下錯誤:

[Fatal Error] :1:103: The entity "nbsp" was referenced, but not declared. 

我不知道這裏做什麼。

我看着它,並且使用Google瞭解了關於EntityResolver的一些信息,但它都很混亂。

我需要將實體視爲純文本。在邏輯上,作爲純文本,它們是平等的。

我試着用下面的選項切換:

 XMLUnit.setExpandEntityReferences(false); //tried true, false 
     XMLUnit.setIgnoreDiffBetweenTextAndCDATA(false); //tried true, false 

毫無效果。 請幫忙,我完全失去了。謝謝!

+0

看來,有字符實體( )和數值實體( )之間的差異。 對於數字實體而言,XMLUnit沒有與字符實體相對的問題。 我在想,一個簡單的字符實體到數字實體過程應該足以解決我的問題。 – TchiYuan

+2

好吧,' '不是XML處理器會識別的東西,除非它被明確聲明。在XML中,只有五個[預定義](http://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent)實體;另一方面,HTML有大約250個。 –

回答

0

我回答我自己的問題(見註釋)