2011-05-10 125 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