2016-03-11 16 views
0

嗨我正在開發一個項目,我需要註冊對XML供稿的更改。 XML Feed是從第三方網站生成的,如果Feed結構發生變化,我很感興趣。我不介意字段的值是否發生變化,但由於網站上運行的腳本,我確實需要註冊結構更改。例如:如何註冊XML供稿結構中的更改

<?xml version="1.0" encoding="UTF-8"?> 
<company> 
    <branch> 
    <employee id="001"> 
     <name>Name 1</name> 
     <designation>Engineer</designation> 
    </employee> 
    <employee id="002"> 
     <name>Name 2</name> 
     <designation>Engineer</designation> 
    </employee> 
    </branch> 
</company> 

<?xml version="1.0" encoding="UTF-8"?> 
<company> 
    <branch> 
    <employee id="001"> 
     <something>Value</something> 
     <name>Name 1</name> 
     <designation>Engineer</designation> 
    </employee> 
    <employee id="002"> 
     <something>Value</something> 
     <name>Name 2</name> 
     <designation>Engineer</designation> 
    </employee> 
    </branch> 
</company> 

我一起工作的文件較大(> 15000行),比例子,在飼料中的變化可能是低至「產品」來'產品'。註冊更改的程序將在服務器上運行並執行每日檢查。

我想到了XML提要轉換爲XSD文件,並存儲舊版本。這樣我可以每天生成一個新的XML文件,將其轉換爲XSD並比較舊版本和新版本。但我不確定這是否正確。

所以我的問題是:有誰知道如何有效地解決這個問題?

回答

1

您所描述的方案是不基於XML的通信是如何工作的。

通信是基於共同的理解建立。基於XML通信的理解通常基於定義XML結構的模式。該模式成爲您可以編寫代碼的合同。

如果沒有架構和共同的理解僅僅是被交換的XML(並且該結構可以通過XML允許任何方式更改),那麼你的XML的處理必須非常通用的。它必須處於元素和屬性的層面,因爲共享的理解只允許任何東西。然後,您將運行在通用XML解析器的領域。

如果您的共同理解可能包括之前的XML文檔,似乎是這樣的,是的,你可以找出差異。但是,這個問題是關於這些差異的。如果你限制它們的性質,這些差異將會很有用。如果您希望獲得MISMO抵押貸款申請文件,並且您收到了WIPO專利申請,則差異將很大,您的選擇無。

最後,如果你確實限制了差異的性質,你將如何表達?答案是你會編寫一個模式,這使我們能夠回到你本來應該一直在的地方,以便進行成功的基於XML的通信。


更新基於意見

如果您只是想確定兩個XML文檔之間的差異,

  • 你可能會發現XML-based diff tools是有益的,或
  • 您可以創建並比較 這兩個XML文檔的元素和屬性名稱列表。僅僅在XSLT或帶有SAX庫的任何語言中,識別新元素或屬性名稱 都會很容易。
+0

嗨,感謝您的迴應!在閱讀你的答案後,我想我的問題不是100%清楚我想達到的目標。我不打算自動處理這些文件之間的差異,但我只是想讓程序通知我第三方到底發生了什麼變化。如何處理這個問題將由人工完成。 – Daan

+0

因此,程序將收到一個新舊文件(格式最好),並返回對XML提要結構進行更改的行。希望能夠澄清這個問題 – Daan