考虑以下两个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
,其中包含<Vehicle id>
和<Image>
,其中<Image id>
新XML中的值不在原始XML中(差异2),或者<Image id>
原始XML BUT中的IS与<Image>
属性值不同。同一张图片的原始XML(差异1)?
结果XDocument
应该看起来像这样...
<Stock>
<Vehicle id="123456">
<Images>
<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>
1]按id
属性加入新旧车辆
2]查找新的或修改Image
的,通过它们的字符串表示形式对其进行比较
3]选择Image
s进入新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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句