Как создать XDocument с foreach и 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 с корневым тегом, немного изменил его, и это было именно то, что я искал:
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")
))
)
);
Марк Гравелл опубликовал лучший ответ на этот qaru.site/info/361521/....
Ответы
Ответ 1
Вам нужен корневой элемент.
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")
))
)
);
Ответ 2
Если я не ошибаюсь, вы должны иметь возможность использовать 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);
}
Ответ 3
Я знаю, что это очень старый пост, но я наткнулся на это сегодня, пытаясь решить ту же проблему. Вы должны добавить элемент в корень документа:
xdoc.Root.Add(xelement);
Ответ 4
Что не так с простым Добавить метод?