Как создать XDocument с foreach и LINQ? - PullRequest
14 голосов
/ 16 июня 2009

Я могу использовать 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?

Ответ:

Я взял предложение кода Джимми с корневым тегом, немного изменил его, и это было именно то, что я искал:

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

Марк Гравелл опубликовал лучший ответ на этот на этот вопрос StackOverflow .

Ответы [ 4 ]

26 голосов
/ 16 июня 2009

Вам нужен корневой элемент.

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")
        ))
    )
);
3 голосов
/ 12 июля 2012

Я знаю, что это очень очень старый пост, но я наткнулся на это сегодня, пытаясь решить ту же проблему. Вы должны добавить элемент в корень документа:

xdoc.Root.Add(xelement);
3 голосов
/ 16 июня 2009

Если я не ошибаюсь, вы сможете использовать 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 голосов
/ 16 июня 2009

Что не так с простым Добавить метод ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...