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

StackOverflow https://stackoverflow.com/questions/545735

Вопрос

Я загрузил 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");
Это было полезно?

Решение

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

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

Другие советы

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

XmlNode node = doc.SelectSingleNode("/report/section/hosts");
node.AppendChild(subRoot);

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

например(верх моей головы, не проверял в Visual Studio)

doc.SelectSingleNode("/report/section/hosts").AppendChild(subRoot);

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top