2010-12-22 48 views
6

我正在爲將用於編寫和編輯文檔的系統(認爲Google文檔,但沒有實時協作)進行頭腦風暴過程。我將使用所見即所得的編輯器,因此這些文檔將包含HTML。在包含HTML的文檔上使用diff

編輯將對文檔進行更改,原始用戶應該看到這些修訂並手動進行更改。

如何在使用HTML標籤時使用diff系統?我希望修改內容能夠顯示對格式的任何更改,例如,如果某些內容粗體顯示,那麼它應該會適應該更改。它也應該使內容更改像普通差異一樣可見。

如果我要使用常規差異系統,那麼它會將HTML看作普通文本,顯然不是這種情況。感謝任何指針!

+0

如果您使用常規差異系統,並將HTML看作普通文本,爲什麼不能正常工作?如果你大膽的話,常規差異將會看到粗體標籤的額外文本。如果您刪除HTML標記,則相同。 – 2010-12-22 21:18:11

+0

對HTML進行實際比較,但是當您並排顯示時,呈現html。突出顯示帶有更改的行,如常規差異工具中所做的那樣。應該按預期工作。 – profitphp 2010-12-22 21:20:49

回答

3

我與HTML差異合作的最佳OSS庫是DaisyDiffPHP Version)。

注意到,對於這個問題,區分HTML或XML是一件麻煩的事情。如果在傳遞到差異算法之前通過執行一些預處理來簡化要比較的數據,則可能會得到更好的結果。例如,如果您確實只使用諸如<p>,<b>,<i>標籤的標記,則會將它們標記爲標記並使用差分算法(例如diff-match-patchGNU Diff)。然後替換那些令牌。有關這方面的一些想法,請參閱diff-match-patch wiki page

0

如果您試圖從頭開始創建這個世界,那麼您將處於痛苦的世界。我試圖選擇一個現成的解決方案 - 谷歌「HTML差異」,你會看到一些供應商。

您可能採取的一種方法是提取文本(條形標籤)並比較未標籤的版本。這很容易做到,但並未完全達到您想要的效果 - 它不會比較修訂版本之間的格式。