考虑以下两个XML文档..
原始
<Stock>
<Vehicle id="123456">
<Name>Ford Ka</Name>
<Images>
<Image Id="111111" Url="http://somewhere.com/GetImage.aspx?ImageId=111111" LastModified="2016-05-12 13:09:00"/>
<Image Id="222222" Url="http://somewhere.com/GetImage.aspx?ImageId=222222" LastModified="2016-05-12 13:09:00"/>
</Images>
</Vehicle>
</Stock>
新
<Stock>
<Vehicle id="123456">
<Name>Ford Ka</Name>
<Images>
<Image Id="111111" Url="http://somewhere.com/GetImage.aspx?ImageId=111111" LastModified="2016-05-12 13:09:00"/>
<Image Id="222222" Url="http://somewhere.com/GetImage.aspx?ImageId=222222" LastModified="2016-05-13 09:00:00"/>
<Image Id="333333" Url="http://somewhere.com/GetImage.aspx?ImageId=333333" LastModified="2016-05-12 13:09:00"/>
</Images>
</Vehicle>
</Stock>
所以它们之间的区别是......
Image Id="222222"
已更改LastModified
值。<Image>
id="333333"
。如何使用LINQ返回包含XDocument
的{{1}}和<Vehicle id>
,其中新XML中的<Image>
值不在原始XML中(差异2)或原始XML中的<Image id>
IS但是<Image id>
属性值中的任何一个与同一图像的原始XML中的值不同(差异1)?
结果<Image>
应该看起来像这样......
XDocument
答案 0 :(得分:1)
1]按id
属性
2]找到新的或修改过的Image
,用字符串表示法比较它们
3]选择Image
成新的Vehicle
元素
4]从Stock
元素构建了Vehicle
个结果
var diff = from newVehicle in newXml.Descendants("Vehicle")
join oldVehicle in oldXml.Descendants("Vehicle")
on newVehicle.Attribute("id").Value
equals oldVehicle.Attribute("id").Value
select new XElement("Vehicle", newVehicle.Attribute("id"),
new XElement("Images",
newVehicle.Descendants("Image")
.Where(i=>!oldVehicle.Descendants("Image")
.Any(iold=>iold.ToString() == i.ToString())
)
)
);
var stock = new XElement("Stock", diff);