Как я могу глубже перемещаться по XML и добавлять в него данные?
-
23-08-2019 - |
Вопрос
Я загрузил 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?