2016-11-28 75 views
0

要找到兩個xml文件之間的區別,是否可以使用XSLT,如果可以,可以共享一個小例子xslt?注意,xslt應該能夠採用任何兩個xml文件,它不應該假設任何特定的樹形結構使用XSLT可以比較兩個xml嗎?

回答

0

從XSLT 2.0開始,您可以使用deep-equalhttps://www.w3.org/TR/xquery-operators/#func-deep-equal函數來比較兩個序列或兩個文檔節點。 deep-equal(doc('file1.xml'), doc('file2.xml')),如果這兩個文件被認爲是相同的鏈接規範中定義的返回true。

至於找到「差異」,你甚至沒有解釋你正在尋找什麼樣的結果。在商業版本撒克遜9具有saxon:deep-equal根據http://saxonica.com/html/documentation/functions/saxon/deep-equal.html它允許您設置?標誌和錯誤監聽

解釋原因不匹配。如果結果不相等,則會向ErrorListener發送解釋原因的警告消息 。 (在 一般情況下,警告消息的序列將被髮送,從 最低水平差和移動上樹)

但是,這是不是規範。

1

在您開始使用XSLT或任何其他語言編寫此代碼之前,您需要編寫一份關於您希望程序執行什麼操作的規範。這是一個複雜的要求,不能用三行來定義。至少有一家公司 - DeltaXML - 以此爲生。

第一個挑戰是定義兩個文件相同的含義。 (你可以把fn:deep-equal作爲起點)。一旦你這樣做了,更難的問題是定義當文件不同時你想要產生什麼輸出。舉一個很簡單的例子,你想對這些文件輸出什麼:

(一)

<a><b/><c/></a> 

(B)

<a><c/><b/></a> 
在這個例子中
+0

沒有區別 – user3626733

+0

哪種類型的證明了一點:你不能一次指定這個例子,你需要編寫一般規則。 –