查找使用linqpad和LINQ to XML两个XML文件匹配的节点是找到0个结果(Finding

2019-10-29 20:38发布

我有相同的架构/结构,但不同的两个数据的XML文件。 我试图用Linqpad(LINQ到XML)来找到两个文件之间的差异。

这里是我的代码...

XElement FILE1 = XElement.Load (@"..\FILE1.XML");
XElement FILE2 = XElement.Load (@"..\FILE2.XML");

var orders = from file1 in FILE1.Descendants("Players").Elements("Player")
                        select new {
                            name=new {
                                firstName=file1.Element("FirstName"),
                                lastName=file1.Element("LastName")
                            }                           
                        };

var orders2 = 
             from file2 in FILE2.Descendants("Players").Elements("Player")
                        select new {
                            name=new {
                                firstName=file2.Element("FirstName"),
                                lastName=file2.Element("LastName")
                            }                           
                        };

var matchingResults = from i in orders from j in orders2 where (i.name.firstName==j.name.firstName && i.name.lastName==j.name.lastName)
                            select i;
matchingResults.Dump()                          

上次转储()将返回0的结果。 我知道有两个匹配的文件数据。

编辑我忘了提,如果我每次倾倒我得到的结果(非常相似),用于两个序列的查询结果。

我也曾尝试这里显示的方法...
比较两个xml和打印使用LINQ的区别

(它结合了文件合并为一个序列,然后就比较),但我在歌厅相同的结果... 0的结果。

这种做法也似乎产生了第一个订单序列的笛卡尔乘积。

我想要的是找到匹配的或丢失从文件中的节点。

我缺少的是在这里吗?

Answer 1:

问题是, matchingResults是做一个比较XElement (参考平等) -不是string (字符串内容)。 ordersorders2被选择firstNamelastName作为XElement 。 因此,要获得你所期望的,要么改变ordersorders2选择firstNamelastName作为

firstName = file1.Element("FirstName").Value

或对它们进行比较matchingResults

i.name.firstName.Value == j.name.firstName.Value

下面是使用第一个选项一个完整的例子:

XElement FILE1 = XElement.Parse(
@"<Root>
    <Players>
        <Player><FirstName>Bob</FirstName><LastName>Smith</LastName></Player>
        <Player><FirstName>John</FirstName><LastName>Smith</LastName></Player>
    </Players>
</Root>");
    XElement FILE2 = XElement.Parse(
@"<Root>
    <Players>
        <Player><FirstName>Bob</FirstName><LastName>Smith</LastName></Player>
        <Player><FirstName>Mike</FirstName><LastName>Smith</LastName></Player>
    </Players>
</Root>");

var orders = from file1 in FILE1.Descendants("Players").Elements("Player")
                    select new {
                        name=new {
                            firstName=file1.Element("FirstName").Value,
                            lastName=file1.Element("LastName").Value
                        }
                    };

var orders2 = from file2 in FILE2.Descendants("Players").Elements("Player")
                    select new {
                        name=new {
                            firstName=file2.Element("FirstName").Value,
                            lastName=file2.Element("LastName").Value
                        }
                    };

//orders.Dump();
//orders2.Dump();

var matchingResults = from i in orders from j in orders2
                                where (i.name.firstName == j.name.firstName && i.name.lastName == j.name.lastName)
                                select i;
matchingResults.Dump();


文章来源: Finding Matching Nodes in two XML files using linqpad and linq to xml is finding 0 results