2011-06-15 75 views
0

我試着避免問這個問題儘可能長...但我還沒有找到任何將完全符合我的需求,這是關於我得到的時間這個項目完成了。比較兩個XML文件的特定元素 - 在java

因此,這裏是我所需要的:

我在做一個應用程序,將基本diff的兩個XML文檔,然後對它們作出的一個微小的變化。我有一個模板xml,然後其他xml文件每次都會更改。我只需確定模板中的關鍵元素是否在其他文件中。任何額外的東西都可以忽略,但是應該添加丟失的關鍵元素。

可視化表示:

模板

<root attribute="asd"> 
    <a /> 
    <b> 
     <c asdf="fdsa" /> 
    </b> 
</root> 

其他XML

<root> 
    <a d="wer" /> 
    <b> 
     <c /> 
    <b> 
    <d /> 
</root> 

最終結果:

<root attribute="asd"> 
    <a d="wer" /> 
    <b> 
     <c asdf="fdsa" /> 
    </b> 
    <d /> 
</root> 

我的問題:

有沒有什麼辦法可以完成這個最終結果而不費力地通過每個關鍵要素並確保它們存在?我研究過XPath,這看起來像是我迄今爲止最好的解決方案,只是檢查是否存在必要的部分,然後添加它們(如果它們不是)(我會創建一個新文件,所以寫入新的元素不是非常麻煩)。然而,由於有很多事情我必須檢查,我寧願不這樣做。我也研究了XMLUnit和XOM,但這些更適合比較和告訴我不同​​之處(包括添加了哪些額外的行,我不感興趣)。

那麼,實現兩行代碼的任何好主意,這只是神奇地完成自己?因爲這將是偉大的:)

回答

2

你應該能夠做到這一點使用XSLT,我會想。不是兩行代碼 - 完全沒有代碼,只是在XSLT文件中合適的啓發式定義。

查看類似問題討論和解決here

+0

我和你在一起。我也添加了同樣的[問題](http://stackoverflow.com/questions/6047505/how-to-compare-and-merge-two-xml-using-xslt/6060359#6060359)親自回答。 – 2011-06-15 16:53:49

+0

@empo - 謝謝。我已經看到很多例子了。 – 2011-06-15 16:59:37

+0

是的,有人打「很容易」的按鈕,因爲,好......很明顯的原因。 – Aelfhere 2011-06-15 19:59:57