使用“查找两个像素之间的增量”;除「;C#
我的第一个想法是:使用“查找两个像素之间的增量”;除「;C#,c#,xml,comparison,xelement,C#,Xml,Comparison,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
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
。我假设这是一个输入错误,您实际上正在加载不同的文件。)
除了之外,您不能使用来比较XElement
s。您正在创建单独的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
。最后,您可以使用除
之外的进行比较,然后生成最终的元素
:
XElement nodenotinsource = new XElement ("result",
from y in sourceData.Except(targetData)
select new XElement("ttt", y.Name));