2011-09-10 27 views
3

我正在爲使用JDOM讀取和寫入XML的代碼編寫單元測試。因此,我需要一些方法將我的代碼生成的JDOM Element與參考Element進行比較,以確保它們是等價的(同名,名稱空間和屬性,以及遞歸地爲其子節點添加相同內容)。如何比較兩個元素的等價性?

不幸的是,僅Element.equals測試是否元素是指稱相等。我怎樣才能最好地確定兩個元素是否代表相同的樹?

回答

3

以下應檢查是否兩個XML元素是等效的:

String myElementString = XMLOutputter.outputString(myElement); 
String testElementString = XMLOutputter.outputString(testElement); 
boolean equals = myElementString.Equals(testElementString); 
+0

假設元素1是這樣的和元素2就是這樣代碼會給我們正確的答案恐怕不是 – confucius

+0

@Nammari - 使用相同的'XMLOutputter'都應該確保相同元素的輸出相同。我不確定命名空間的效果如何,但我必須嘗試一下。 –

+0

@Nammari:同樣的事Ben Ben說。元素包含數據並且不描述XML格式。 XMLOutputter允許您指定輸出的格式,因此只要使用相同的XMLOutputter,您的問題就無法解決。 –

1

我只能想到的三種方式:

  1. 手動創建代碼中使用元素的可公開訪問的字段比較。
  2. 使用Java反射創建代碼來枚舉Element的字段並將它們全部進行比較。淺層或深層比較取決於您的需求。
  3. 使用其中一個xxxOutputter類輸出每個元素並比較輸出。例如。使用org.jdom.output.XMLOutputter從每個元素創建一個XML字符串並比較字符串。

所有令人討厭的公平!

+0

假設元件1是這樣的和元件2是這樣的你的代碼會給我們正確的答案恐怕不是 – confucius

+0

我認爲你誤會了。輸出方法是相同的,所以如果元素相等,那麼輸出也會如此。爲什麼你認爲相同的XMLOutputter會以不同的方式關閉沒有孩子的元素? –