我的第一个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"))
));
我想找到delta(源始终包含目标) 这样的事情......遗憾的是我的工作不正常:
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");
这两个文件是相同的,除了程序应该找到的更改...
答案 0 :(得分:0)
(在您问题的代码中,您正在将相同的文件加载到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));