我希望创建一个具有多个 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(XDocument
、XElement
等)从某些数据创建 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/