gpt4 book ai didi

c# - 如何在 foreach 循环中创建具有多个 xelement 节点的顶级 xelement

转载 作者:太空宇宙 更新时间:2023-11-03 21:29:32 25 4
gpt4 key购买 nike

我希望创建一个具有多个 XElement 子节点的顶级 XElement,如下所示。

<Names>
<Name>
<firstname>Mike</firstname>
<lastname>Smith</lastname>
</Name>
<Name>
<firstname>Sam</firstname>
<lastname>Smith</lastname>
</Name>
<Name>
<firstname>Michelle</firstname>
<lastname>Smith</lastname>
</Name>
</Names>

如果我使用类似于下面的内容,我如何将子元素(元素)附加到顶级元素?感谢您的任何建议。

for (int i = 0; i < 10; i++)
{
var str = GetName(i);
//str is a string that contains xml
XDocument doc = XDocument.Parse(str);
XElement nameEle = doc.Root;

}

最佳答案

我将您的问题解释为如何使用 LINQ to XML(XDocumentXElement 等)从某些数据创建 XML 元素。 LINQ to XML 的构建是为了支持所谓的 functional construction。它允许您在单个语句中创建 XML 树。在我看来,这是创建 XML 元素而不是改变现有结构的最佳方式。

要创建 XML 元素,您需要一些数据,这些数据的格式应为 IEnumerable<T>。序列(LINQ 的基本接口(interface))。我的小示例使用匿名类型数组:

var names = new[] {
new { FirstName = "Mike", LastName = "Smith" },
new { FirstName = "Sam", LastName = "Smith" },
new { FirstName = "Michelle", LastName = "Smith" }
};

您还可以创建 IEnumerable<T>使用函数调用的序列:

var names = Enumerable.Range(0, 10).Select(i => GetName(i));

这假设GetName(i)将返回一个具有 FirstName 的对象和一个 LastName属性(property)。

然后您可以使用函数构造在单个语句中创建 XML 元素:

var xElement = new XElement("Names",
names.Select(
name => new XElement("Name",
new XElement("FirstName", name.FirstName),
new XElement("LastName", name.LastName)
)
)
);

代码的结构和缩进反射(reflect)了生成的 XML 并使其易于理解正在发生的事情:

<Names>
<Name>
<FirstName>Mike</FirstName>
<LastName>Smith</LastName>
</Name>
<Name>
<FirstName>Sam</FirstName>
<LastName>Smith</LastName>
</Name>
<Name>
<FirstName>Michelle</FirstName>
<LastName>Smith</LastName>
</Name>
</Names>

关于c# - 如何在 foreach 循环中创建具有多个 xelement 节点的顶级 xelement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019554/

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