2016-12-02 60 views
2

我正在使用一個程序,其行爲像一個平臺,它創建它使用的對象的實例並將它們以xml格式存儲在數據庫中。該程序有一種方法可以將這些對象「轉儲」到xml集合中。智能化的方法來區分XML

我正在尋找我們的生產環境和我們的開發環境之間的差異,以便能夠確定它們之間的任何增量。

由於轉儲依賴於db中項目的順序,所以正常的diff並不合理。我需要的是在比較之前將xml元素在兩個轉儲中進行排序的方式,以便diff更加智能並更準確地反映delta。

例如:

文件1:

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
    <bar1>stuff1</bar1> 
    <bar2>stuff2</bar2> 
</foo> 

文件2:

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
    <bar2>stuff2</bar2> 
     <bar1>stuff1</bar1> 
</foo> 

我正在尋找一種方式,其中上述文件的差異會結果沒有區別,因爲唯一的區別是foo元素的空白和子順序。

有關如何用大文件完成此操作的任何想法?

小文件的以下工作:

使用http://prettydiff.com/我可以確保的「排序標記件」被選定的選項做到這一點。之後,我可以對上述內容進行區分,並將其展示爲一個匹配項。

我需要在本地做類似這樣的事情,可以用於可能相當大的文件。

+1

https://www.altova.com/diffdog/xml-diff.html – bmargulies

+1

真正的問題是,一些標籤允許他們的孩子以任意順序(「一組」),有些不允許(「一個序列」) ,這取決於應用程序的要求。我不知道你如何表達這種差異;如果你這樣做了,它將在文件的模式中。因此,無論您尋找哪種工具,都需要考慮架構,或者假設每個標籤內容都已排序(這是一個非常特殊的情況,並且可能適用於您),您最好對該工具感到滿意。 –

+0

http://stackoverflow.com/a/40738608/1030675 – choroba

回答

1

給了這個想法,我想如果有一種方法來從命令行排序xml文件,那麼我可以對文件做一個diff。

我跟進谷歌我的想法使我以下內容:https://superuser.com/questions/79920/how-can-i-diff-two-xml-files

在上面,關鍵是canonical xml sort。由於我使用的是Mac,上面給了我爲我的問題,我的工作如下:

$ xmllint --c14n File1.xml > 1.xml 
$ xmllint --c14n File2.xml > 2.xml 
$ diff 1.xml 2.xml 

上面也應該爲你工作,如果你是在Linux上,或者使用類似安裝了Cygwin /用窗口設置。