Как я могу углубляться в XML и добавлять в него данные - PullRequest
1 голос
/ 13 февраля 2009

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

doc.SelectNodes ( "/ отчет / раздел / хосты") AppendChild (subRoot).

Код:

        XmlDocument doc = new XmlDocument();

        doc.Load("c:\\data.xml");

        //host
        XmlElement subRoot = doc.CreateElement("host");

        //Name
        XmlElement ElName = doc.CreateElement("name");
        XmlText TxtName = doc.CreateTextNode("text text");
        ElName.AppendChild(TxtName);
        subRoot.AppendChild(ElName);
        doc.DocumentElement.AppendChild(subRoot);

        doc.Save("c:\\data.xml");

Ответы [ 4 ]

3 голосов
/ 13 февраля 2009

Попробуйте SelectSingleNode вместо SelectNodes

XmlElement parent = (XmlElement)doc.SelectSingleNode("/report/section/hosts")
parent.AppendChild(subRoot);
1 голос
/ 13 февраля 2009

Вы почти у цели. Попробуйте вместо этого использовать SelectSingleNode:

XmlNode node = doc.SelectSingleNode("/report/section/hosts");
node.AppendChild(subRoot);
1 голос
/ 13 февраля 2009

Метод SelectNodes возвращает список узлов. Вы должны использовать SelectSingleNode вместо ...

например. (в верхней части головы, не тестировал в Visual Studio)

doc.SelectSingleNode("/report/section/hosts").AppendChild(subRoot);
0 голосов
/ 13 февраля 2009

Вам нужно получить ссылку на XmlElement в вашем документе (кроме корневого) для добавления. Существует ряд методов , доступных в XmlDocument, таких как GetElementById и SelectSingleNode, которые делают это для вас различными способами, исследования по вкусу.

Тем не менее, весь API в этой области обычно считается немного болезненным, у вас есть доступный LINQ?

...