2011-05-10 164 views
1

有什麼辦法可以比較C#中的兩個XML文件嗎?我只想比較第一個文件的節點和第二個文件的節點。我不想追加缺少的節點。xml文件比較

有沒有辦法做到這一點?

這是我曾嘗試:

var docA = XDocument.Parse(@"<mind_layout></mind_layout>"); 
var docB = XDocument.Parse(@"<mind_layout></mind_layout>"); 

var rootNameA = docA.Root.Name; 
var rootNameB = docB.Root.Name; 
var equalRootNames = rootNameB.Equals(rootNameA); 

var descendantsA = docA.Root.Descendants(); 
var descendantsB = docB.Root.Descendants(); 
for (int i = 0; i < descendantsA.Count(); i++) 
{ 
    var descendantA = descendantsA.ElementAt(i); 
    var descendantB = descendantsB.ElementAt(i); 
    var equalChildNames = descendantA.Name.Equals(descendantB.Name); 

    var valueA = descendantA.Value; 
    var valueB = descendantA.Value; 
    var equalValues = valueA.Equals(valueB); 
} 

其中<mind_layout>是在這兩個文件的根節點。

+0

VAR DOC1 = XDocument.Load(File.OpenRead(@「C:\路徑\到\ file1.xml 「)); var doc2 = XDocument.Load(File.OpenRead(@「C:\ path \ to \ file2.xml」)); 如果(XDocument.DeepEquals(DOC1,DOC2)) { //相同的XML內容 } 但是這也比較我不想要的節點的值.. – kawadw 2011-05-10 04:56:05

+0

VAR DOC1 = XDocument.Load( File.OpenRead(@ 「C:\路徑\到\ file1.xml」)); var doc2 = XDocument.Load(File.OpenRead(@「C:\ path \ to \ file2.xml」)); 如果(XDocument.DeepEquals(DOC1,DOC2)){ // 相同的XML內容 } 這也比較節點值,我不want.I只是想比較節點格式.. – kawadw 2011-05-10 04:56:52

+0

我想只比較節點的名稱而不是節點的內容.. – kawadw 2011-05-10 05:10:02

回答

1

如果你只是想比較的文件內容(包括,例如,壓痕),你coud做:

​​

(警告:這是不是最優化的勾選你能做到!)

如果您想將XML內容比較(不考慮格式的),你可以這樣做:

var doc1 = XDocument.Load(File.OpenRead(@"C:\path\to\file1.xml")); 
var doc2 = XDocument.Load(File.OpenRead(@"C:\path\to\file2.xml")); 

if (XDocument.DeepEquals(doc1, doc2)) 
{ 
    // Same XML content 
} 
+0

但是我想只比較節點的格式而不是節點的值.. – kawadw 2011-05-10 04:54:42

+0

我想只比較節點的名稱而不是節點的內容.. – kawadw 2011-05-10 05:09:42