【发布时间】:2015-08-27 10:38:39
【问题描述】:
我正在使用 c sharp 5.0 并使用 LINQ to XML 我尝试以编程方式获取 2 个 xml 文件之间的差异 我的第一个文件很简单:
<?xml version="1.0" encoding="UTF-8" ?>
<table name="MYTABLE">
<columns>
<column name="MY_ID" type="NUMBER"/>
<column name="M_NAME" type="VARCHAR2" />
<column name="MY_PARENT_ID" type="VARCHAR2" />
<column name="MY_CAPTION" type="VARCHAR2" />
</columns>
</table>
我的第二个 xml 文件很简单:
<?xml version="1.0" encoding="UTF-8" ?>
<table name=" MYTABLE ">
<columns>
<column name="MY_ID" type="NUMBER"/>
<column name="M_NAME" type="VARCHAR2" />
<column name="MY_PARENT_ID" type="NUMBER" />
</columns>
</table>
我的代码很简单:
XDocument doc1 = XDocument.Load(@"Path\table1.xml");
XDocument doc2 = XDocument.Load(@"Path\table2.xml");
var cols1 = doc1.Descendants("column") ;
var cols2 = doc2.Descendants("column") ;
var itemsOnFirstFileOnly = cols1.Except(cols2);
var itemsOnSecondFileOnly = cols2.Except(cols1);
但令我惊讶的是 itemsOnFirstFileOnly 返回了 table1.xml 上存在的所有列(不仅是 MY_PARENT_ID 和 MY_CAPTION ),并且 itemsOnSecondFileOnly 返回了 table2.xml 中存在的所有列(不仅是 MY_PARENT_ID),所以为什么不除外呢?没有按预期工作??
【问题讨论】:
-
尝试将使用DeepEquals 的XNodeEqualityComparer 提供给
Except方法。没有它,可能只比较两个元素的引用。