gpt4 book ai didi

c# - 如何将两个 XElements 与 linq select 组合?

转载 作者:太空狗 更新时间:2023-10-30 00:50:25 25 4
gpt4 key购买 nike

我正在尝试将两个 XElements 列表合并为一个:

var list1 = XElement.Parse(@"<root><Element name=""foo"">
<ChildElement name=""childFoo"">
<SubChildElement name=""subChildFoo"" />
</ChildElement>
</Element>
<Element name=""bar"">
<ChildElement name=""childBar"">
<SubChildElement name=""subChildBar"" />
</ChildElement>
</Element>
<Element name=""zoo"" /></root>").XPathSelectElements("Element").ToList();

var list2 = XElement.Parse(@"<root><Element name=""foo"" attr=""fooAtr"" />
<Element name=""bar"" attr=""barAtr"" />
<Element name=""zoo"" attr=""barAtr"" /></root>").XPathSelectElements("Element").ToList();

var res = from e2 in list2
join e1 in list1
on e2.Attribute("name").Value equals e1.Attribute("name").Value
select new XElement(e1.Add(e2.Element("ChildElement")));

代码无法编译,因为选择错误(XElement.Add() 返回 void)。

如何在选择中组合两个 XElements:e1 和 e2 并返回新的 xelement(e2 与 e1 的子元素)

我想获取这种格式的列表:

<Element name="foo" attr="fooAtr">
<ChildElement name="childFoo">
<SubChildElement name="subChildFoo" />
</ChildEelement>
</Element>
<Element name="bar" attr="barAtr">
<ChildElement name="childBar">
<SubChildElement name="subChildBar" />
</ChildEelement>
</Element>
<Element name="zoo" attr="barAtr" />

最佳答案

我会放弃 XPath 并使用 LINQ to XML 查询方法来查找您的元素。您的 select 需要复制第二个元素的名称和属性以及第一个元素的子元素:

var results = from e2 in second.Descendants("Element")
join e1 in first.Descendants("Element")
on (string)e2.Attribute("name") equals (string)e1.Attribute("name")
select new XElement(e2.Name, e2.Attributes(), e1.Elements());

在此处查看工作演示:https://dotnetfiddle.net/J3mcXu

关于c# - 如何将两个 XElements 与 linq select 组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31676600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com