C# 使用linq to xml基于另一个具有重复元素的xml更新一个xml
我有一个源xml:C# 使用linq to xml基于另一个具有重复元素的xml更新一个xml,c#,linq-to-xml,C#,Linq To Xml,我有一个源xml: <Source> <First> <Name>Name1</Name> </First> <First> <Name>Name2</Name> </First> </Source> 名称1 姓名2 我有一个空的目标xml,我想从源xml复制数据 空的目标xml是: <Target&g
<Source>
<First>
<Name>Name1</Name>
</First>
<First>
<Name>Name2</Name>
</First>
</Source>
名称1
姓名2
我有一个空的目标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>
名称1
姓名2
我正在寻找一个简单的linq到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());
var source=“Name1Name2”;
var sourceDocument=XDocument.Load(新的StringReader(源));
var target=“”;
var targetDocument=XDocument.Load(新的StringReader(目标));
var sourcenamelements=sourceDocument.subjects(“First”).Select(First=>First.Element(“Name”)).ToList();
var targetNamesElements=targetDocument.subjects(“Second”).Select(Second=>Second.Element(“FirstName”).ToList();
对于(var i=0;i
我不知道解决这个问题的最简单方法,这是我能想到的最好方法,您必须确保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++];
}
谢谢你,埃里克。这是一个关于结束元素的打字错误。您的解决方案很好,但我的情况是,我有一个现有的目标xml,需要对此进行更新。我无法在代码中创建结构。所以我需要一些东西,比如读取源代码和目标代码,以及基于源代码更新目标代码