使用“除外”来找到两个x元素之间的增量。 C# [英] Find the delta between two xelements using "except" C#
问题描述
我的第一个XElement是:
XElement sourceFile = new XElement(source,
from o in Version1 。元素(文件夹)。元素(文件夹)。ElementAt(0).Elements(folder)
其中o.Name!= null& o.Name ==folder
select new XElement(data,
new XElement(name,(string)o.Attribute(name)),
new XElement(filesCount, .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)
其中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,
y in sourceFile.Elements()。Except(from o in targetFile.Elements())
select new XElement(ttt,y.Element(name)。
版本1和版本2创建如下:
XElement Version1 = XElement.Load(@C:\output\xmltestO.xml);
XElement Version2 = XElement.Load(@C:\output\xmltestO.xml);
其中两个文件是相同的,除了程序应该更改...
(在问题的代码中,您正在将同一个文件加载到 Version1
和 Version2
。我假设这是一个拼写错误,您实际上正在加载不同的文件。)
您不能使用除了
来比较 XElement
。您正在创建 XElement
的单独实例。即使它们包含相同的内容,它们也不会相等。
因此,您需要比较原始数据。例如:
var sourceData =
来自Version1.Element(folder ).ElementAt(0).Elements(folder)
其中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
:
XElement nodenotinsource = new XElement(result,
from y in sourceData.Except(targetData)
select new XElement(ttt, y.Name));
My first XElement is:
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)
My second is:
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"))
));
I'd like to find the delta (the source always contains the target) something like this... sadly my is not working:
XElement nodenotinsource = new XElement ("result",
from y in sourceFile.Elements().Except(from o in targetFile.Elements())
select new XElement("ttt", y.Element("name").Value));
Version1 and Version2 were created like this:
XElement Version1 = XElement.Load(@"C:\output\xmltestO.xml");
XElement Version2 = XElement.Load(@"C:\output\xmltestO.xml");
where the two files are the same except the change the program should find...
(In the code in your question, you are loading the same file into Version1
and Version2
. I’ll assume this is a typo and you are actually loading different files.)
You can’t use Except
to compare XElement
s. You are creating separate instances of XElement
. Even though they contain the same contents, they will not compare as equal.
Therefore, you need to compare the original data. For example:
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"))
};
Then do the same with the target file to get targetData
. Finally, you can compare them using Except
and then generate your final XElement
:
XElement nodenotinsource = new XElement ("result",
from y in sourceData.Except(targetData)
select new XElement("ttt", y.Name));
这篇关于使用“除外”来找到两个x元素之间的增量。 C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!