[英]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");
除了程序应该找到的更改以外,两个文件都相同的地方...
(在您问题的代码中,您正在将相同的文件加载到Version1
和Version2
。我假设这是一个错字,实际上您正在加载其他文件。)
您不能使用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.