作為進(jìn)行大量單元測(cè)試的基類(lèi)的一部分,我正在編寫(xiě)一個(gè)輔助函數(shù),該函數(shù)以遞歸方式比較一個(gè)XmlDocument對(duì)象的節(jié)點(diǎn)與C#(.NET)中另一個(gè)XmlDocument對(duì)象的節(jié)點(diǎn)。對(duì)此的一些要求:第一個(gè)文檔是源,例如,我想要XML文檔的外觀。因此,第二個(gè)是我要查找差異的節(jié)點(diǎn),它不能包含第一個(gè)文檔中沒(méi)有的多余節(jié)點(diǎn)。當(dāng)發(fā)現(xiàn)太多顯著差異時(shí),必須拋出異常,并且人為查看該描述應(yīng)該很容易理解。子元素的順序很重要,屬性可以是任何順序。有些屬性是可忽略的。特別是xsi:schemaLocation和xmlns:xsi,雖然我希望能夠通過(guò)在哪些。名稱空間的前綴必須在屬性和元素中都匹配。元素之間的空格無(wú)關(guān)緊要。元素將要么有子元素或 InnerText,但不能同時(shí)。當(dāng)我湊在一起時(shí):有沒(méi)有人寫(xiě)過(guò)這樣的代碼,可以在這里共享嗎?順便說(shuō)一句,您將如何稱呼第一文檔和第二文檔?我一直將它們稱為“源”和“目標(biāo)”,但感覺(jué)不對(duì),因?yàn)樵词俏蚁胍繕?biāo)的外觀,否則我拋出異常。
3 回答

慕尼黑5688855
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
比較XML文檔很復(fù)雜。Google for xmldiff(甚至還有Microsoft解決方案)中的一些工具。我已經(jīng)通過(guò)兩種方法解決了這個(gè)問(wèn)題。我使用XSLT對(duì)元素和屬性進(jìn)行排序(因?yàn)橛袝r(shí)它們會(huì)以不同的順序出現(xiàn),而我對(duì)此并不在意),并篩選出我不想比較的屬性,然后使用XML :: Diff或XML :: SemanticDiff perl模塊,或?qū)⒚總€(gè)文檔和每個(gè)元素和屬性都漂亮地打印在單獨(dú)的一行上,并在結(jié)果上使用Unix命令行diff。
- 3 回答
- 0 關(guān)注
- 824 瀏覽
添加回答
舉報(bào)
0/150
提交
取消