如何使用Linq将子节点移动到XML
本文关键字:移动 XML 子节点 何使用 Linq | 更新日期: 2023-09-27 18:09:08
可能重复:
LINQ到XML新手:将节点从一个节点移动到另一个
我有以下XML,它是使用由XElements组成的XDocument生成的,但我在格式化XML时遇到了问题:
这就是我现在拥有的:
<Root>
<Companies>
<Company>
<ID>1</ID)
<Name>Kalle</Name>
<RegNo>1111</RegNo>
</Company>
</Companies>
<Companies>
<Company>
<ID>1</ID)
<Name>Kalle</Name>
<RegNo>1112</RegNo>
</Company>
</Companies>
</root>
这就是我想要的:
<Root>
<Companies>
<Company>
<ID>1</ID)
<Name>Kalle</Name>
<RegNo>1111</RegNo>
<RegNo>1112</RegNo>
</Company>
</Companies>
</Root>
我想做的是将所有类似条目/帖子移动到类似节点。这部分代码:
XElement xmlTree = new XElement("Root", File.ReadAllLines("C:''Data.txt")
.Select
(
line =>
{
var split = line.DelSplit();
return new XElement("Companies",
new XElement("Company", split[0]),
new XElement("ID",
new XElement("Name",
new XElement("RegNo", split[1])
);
}
)
XDocument Xdoc = new XDocument(xmlTree);
Xdoc.Save("c:''Data.xml");
这是我想合并的原始来源:
<Club>
<ID>A</ID>
<ContractYears>
<ContractYear>
<Year>2011</Year>
<Owners>
<Owner>
<OwnerName>Walt Disney</OwnerName>
<RegistrationNumber>131313</RegistrationNumber>
<Vessels>
<Vessel>
<VesselName>Alpha</VesselName>
<Status>A</Status>
<DateAttached></DateAttached>
<BrokerName></BrokerName>
<Currencies>
<Currency>
<CurrencyCode></CurrencyCode>
<TotalValue></TotalValue>
<InterestSplits>
<InterestSplit>
<Number></Number>
<Amount></Amount>
</InterestSplit>
</InterestSplits>
</Currency>
</Currencies>
</Vessel>
</Vessels>
</Owner>
</Owners>
</ContractYear>
</ContractYears>
</Club>
<Club>
<ID>A</ID>
<ContractYears>
<ContractYear>
<Year>2011</Year>
<Owners>
<Owner>
<OwnerName>Walt Disney.</OwnerName>
<RegistrationNumber>131313</RegistrationNumber>
<Vessels>
<Vessel>
<VesselName>Beta</VesselName>
<Status></Status>
<DateAttached></DateAttached>
<BrokerName></BrokerName>
<Currencies>
<Currency>
<CurrencyCode></CurrencyCode>
<TotalValue></TotalValue>
<InterestSplits>
<InterestSplit>
<Number></Number>
<Amount></Amount>
</InterestSplit>
</InterestSplits>
</Currency>
</Currencies>
</Vessel>
</Vessels>
</Owner>
</Owners>
</ContractYear>
</ContractYears>
</Club>
<Club>
如果您想从文本文件中创建正确的XML,您需要向我们展示文本文件中的数据外观。假设你想操作现有的XML,你可以通过LINQ分组和LINQ到XML来实现,例如
XDocument input = XDocument.Parse(@"<Root>
<Companies>
<Company>
<ID>1</ID>
<Name>Kalle</Name>
<RegNo>1111</RegNo>
</Company>
</Companies>
<Companies>
<Company>
<ID>1</ID>
<Name>Kalle</Name>
<RegNo>1112</RegNo>
</Company>
</Companies>
</Root>
");
XDocument output =
new XDocument(
new XElement(input.Root.Name,
new XElement("Companies",
from comp in input.Root.Elements("Companies").Elements("Company")
group comp by (int)comp.Element("ID") into g
select new XElement("Company",
new XElement("ID", g.Key),
g.Elements("Name").First(),
g.Elements("RegNo")
))));
output.Save(Console.Out);
输出
<Root>
<Companies>
<Company>
<ID>1</ID>
<Name>Kalle</Name>
<RegNo>1111</RegNo>
<RegNo>1112</RegNo>
</Company>
</Companies>
</Root>
如果您想在从文本文件中读取这些行时对数据进行分组,那么LINQ"from..group by into..select"当然会非常相似。