Как я могу углубиться в XML и добавить в него данные

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

doc.SelectNodes("/report/section/hosts").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");

person jpkeisala    schedule 13.02.2009    source источник


Ответы (4)


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

XmlElement parent = (XmlElement)doc.SelectSingleNode("/report/section/hosts")
parent.AppendChild(subRoot);
person AnthonyWJones    schedule 13.02.2009

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

XmlNode node = doc.SelectSingleNode("/report/section/hosts");
node.AppendChild(subRoot);
person Jakob Christensen    schedule 13.02.2009

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

например (навскидку, не проверял в Visual Studio)

doc.SelectSingleNode("/report/section/hosts").AppendChild(subRoot);
person RuudKok    schedule 13.02.2009

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

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

person annakata    schedule 13.02.2009