Как добавить XElement в документ, чтобы избежать ошибки «неправильно структурированный документ»? - PullRequest
21 голосов
/ 21 января 2010
        // Remove element with ID of 1
        var userIds = from user in document.Descendants("Id")
                       where user.Value == "1"
                       select user;

        userIds.Remove();

        SaveAndDisplay(document);

        // Add element back
        var newElement = new XElement("Id", "0", 
            new XElement("Balance", "3000"));
        document.Add(newElement);

        SaveAndDisplay(document);

Проблема заключается в том, что задний блок добавления элемента является проблемой. Что касается добавления, оно гласит:

Эта операция создаст неправильно структурированный документ.

Какую глупую ошибку я совершаю?

Edit:

Да, я читал как XDocument, а не XElement. Какой-нибудь совет, когда отдать предпочтение одному или другому?

Ответы [ 2 ]

39 голосов
/ 21 января 2010

Похоже, вы пытаетесь добавить новый элемент как дочерний элемент корня вашего документа. Если это так, то вам нужно изменить свой оператор Add на следующий.

var newElement = new XElement("Id", "0", new XElement("Balanace", "3000"));
document.Root.Add(newElement);

При добавлении непосредственно в документ добавляется еще один корневой элемент, который нарушает структуру XML.

8 голосов
/ 21 января 2010

Вы фактически пытаетесь добавить новый корневой элемент, который не нравится этим объектам. Я полагаю, document XDocument? Поместите его дальше в корневой узел, добавив его в корневой узел. Использование:

document.Root.Add(newElement) или document.FirstNode.Add(newElement)

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