[英]update one xml based on another xml with repetitive elements with linq to xml
我有一個源XML:
<Source>
<First>
<Name>Name1</Name>
</First>
<First>
<Name>Name2</Name>
</First>
</Source>
我有一個空的目標xml,我要在其中復制源xml中的數據。
空目標xml是:
<Target>
<Second>
<FirstName></FirstName>
</Second>
<Second>
<FirstName></FirstName>
</Second>
</Target>
復制后,目標xml將如下所示:
<Target>
<Second>
<FirstName>Name1</FirstName>
</Second>
<Second>
<FirstName>Name2</FirstName>
</Second>
</Target>
我正在尋找一個簡單的linq to xml解決方案。 問題是,我不知道如何基於源xml中的重復元素來更新目標xml中的重復元素。
謝謝。
您可以使用以下代碼進行操作:
var source = "<Source><First><Name>Name1</Name></First><First><Name>Name2</Name></First></Source>";
var sourceDocument = XDocument.Load(new StringReader(source));
var target = "<Target><Second><FirstName></FirstName></Second><Second><FirstName></FirstName></Second></Target>";
var targetDocument = XDocument.Load(new StringReader(target));
var sourceNameElements = sourceDocument.Descendants("First").Select(first => first.Element("Name")).ToList();
var targetNamesElements = targetDocument.Descendants("Second").Select(second => second.Element("FirstName")).ToList();
for (var i = 0; i < sourceNameElements.Count; ++i)
{
targetNamesElements[i].SetValue(sourceNameElements[i].Value);
}
Console.WriteLine(targetDocument.ToString());
我不知道解決此問題的最簡單方法,這是我能想到的最好方法,您必須確保Name.count大於FirstName.count:
var sourceXml =XElement.Parse(source);
var targetXml = XElement.Parse(target);
var i = 0;
var nameArray = (from name in sourceXml.Descendants("Name")
select name.Value).ToArray();
foreach (var fName in targetXml.Descendants("FirstName"))
{
fName.Value = nameArray[i++];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.