如何使用foreach和LINQ构建XDocument?

Edw*_*uay 14 c# xml linq

我可以使用XDocument来构建以下文件,该文件正常工作:

XDocument xdoc = new XDocument
(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(_pluralCamelNotation,
        new XElement(_singularCamelNotation,
            new XElement("id", "1"),
            new XElement("whenCreated", "2008-12-31")
        ),
        new XElement(_singularCamelNotation,
            new XElement("id", "2"),
            new XElement("whenCreated", "2008-12-31")
            )
        )
);
Run Code Online (Sandbox Code Playgroud)

但是,我需要通过迭代这样的集合来构建XML文件:

XDocument xdoc = new XDocument
(
    new XDeclaration("1.0", "utf-8", null));

foreach (DataType dataType in _dataTypes)
{
    XElement xelement = new XElement(_pluralCamelNotation,
        new XElement(_singularCamelNotation,
        new XElement("id", "1"),
        new XElement("whenCreated", "2008-12-31")
    ));
    xdoc.AddInterally(xelement); //PSEUDO-CODE
}
Run Code Online (Sandbox Code Playgroud)

Add,AddFirst,AddAfterSelf,AddBeforeSelf,但我不能让它们在这个上下文中工作.

这样的LINQ迭代是否可行?

回答:

我把Jimmy的代码建议与root标签一起使用,稍微改了一下,这正是我想要的:

var xdoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(_pluralCamelNotation,
        _dataTypes.Select(datatype => new XElement(_singularCamelNotation,
            new XElement("id", "1"),
            new XElement("whenCreated", "2008-12-31")
        ))
    )
);
Run Code Online (Sandbox Code Playgroud)

Marc Gravell 在这个StackOverflow问题上发布了一个更好的答案.

Jim*_*mmy 26

你需要一个根元素.

var xdoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement("Root",
        _dataTypes.Select(datatype => new XElement(datatype._pluralCamelNotation,
            new XElement(datatype._singlarCamelNotation),
            new XElement("id", "1"),
            new XElement("whenCreated", "2008-12-31")
        ))
    )
);
Run Code Online (Sandbox Code Playgroud)