繁体   English   中英

使用“ except” C#查找两个要素之间的增量

[英]Find the delta between two xelements using “except” C#

我的第一个XElement是:

XElement sourceFile = new XElement("source",
                from o in Version1.Element("folder").Elements("folders").ElementAt(0).Elements("folder")
                where o.Name != null && o.Name == "folder"
                select new XElement("data",
                    new XElement("name",(string) o.Attribute("name")),
                    new XElement("filesCount", (string)o.Attribute("folderCount")),
                    new XElement("filesCount", (string)o.Attribute("filesCount"))
            )); 
            //,o)

我的第二个是:

XElement targetFile = new XElement("target",
            from o in Version2.Element("folder").Elements("folders").ElementAt(0).Elements("folder")
            where o.Name != null && o.Name == "folder"
            select new XElement("data",
                new XElement("name", (string)o.Attribute("name")),
                new XElement("filesCount", (string)o.Attribute("folderCount")),
                new XElement("filesCount", (string)o.Attribute("filesCount"))
        )); 

我想找到这样的增量(源始终包含目标)……可悲的是我无法正常工作:

XElement nodenotinsource = new XElement ("result",
            from y in sourceFile.Elements().Except(from o in targetFile.Elements())
           select new XElement("ttt", y.Element("name").Value));

版本1和版本2的创建如下:

XElement Version1 = XElement.Load(@"C:\output\xmltestO.xml");
XElement Version2 = XElement.Load(@"C:\output\xmltestO.xml");

除了程序应该找到的更改以外,两个文件都相同的地方...

(在您问题的代码中,您正在将相同的文件加载到Version1Version2 。我假设这是一个错字,实际上您正在加载其他文件。)

您不能使用Except比较XElement 您正在创建XElement单独实例。 即使它们包含相同的内容,它们也不会相等。

因此,您需要比较原始数据。 例如:

var sourceData =
    from o in Version1.Element("folder").Elements("folders").ElementAt(0).Elements("folder")
    where o.Name != null && o.Name == "folder"
    select new {
        Name = (string) o.Attribute("name")),
        FolderCount = (string)o.Attribute("folderCount")),
        FilesCount = (string)o.Attribute("filesCount"))
    };

然后对目标文件执行相同操作以获取targetData 最后,您可以使用Except比较它们,然后生成最终的XElement

XElement nodenotinsource = new XElement ("result",
    from y in sourceData.Except(targetData)
    select new XElement("ttt", y.Name));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM