如何使用foreach和LINQ构建XDocument?

时间:2009-06-16 15:45:33

标签: 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")
            )
        )
);

,我需要通过遍历集合来构建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
}

添加 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")
        ))
    )
);

Marc Gravell对此on this StackOverflow question发布了更好的答案。

4 个答案:

答案 0 :(得分: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")
        ))
    )
);

答案 1 :(得分:3)

如果我没弄错,你应该可以使用XDocument.Add():

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.Add(xelement);
}

答案 2 :(得分:3)

我知道这是非常古老的帖子,但我今天偶然发现了这个问题,试图解决同样的问题。您必须将元素添加到文档的根目录:

xdoc.Root.Add(xelement);

答案 3 :(得分:2)

简单的Add method有什么问题?