Рекурсивное чтение xml файла используя XmlReader - C#
Формулировка задачи:
Необходимо получить список всех дочерних элементов в xml, по отношению к родительским, те родительский элемент и список дочерних для него первого уровня вложенности и тд. Структура xml заранее не известна, размер тоже, поэтому для парсинга используется XmlReader. С помощью других механизмов возможен недостаток памяти при загрузке большой xml. Пробую использовать рекурсию для этого, код ниже:
Но при этом возникает ошибка если у родительского элемента более одного равнозначного вложенного ребенка. Можно это как нибудь обойти?
static void recursive_read(XmlReader xmlr) { while (xmlr.Read()) { xmlr.MoveToContent(); if (xmlr.NodeType.ToString() == "Element") { var innerxml = xmlr.ReadInnerXml(); var inreader = XmlReader.Create(new System.IO.StringReader(innerxml)); recursive_read(inreader); } else if (xmlr.NodeType.ToString() == "Text") { } else if (xmlr.NodeType.ToString() == "EndElement") { } }
Решение задачи: «Рекурсивное чтение xml файла используя XmlReader»
textual
Листинг программы
static void recursive_read_first (XmlReader xmlr, string e) { var iterationResult = new List<string>(); while (xmlr.Read()) { xmlr.MoveToContent(); if (xmlr.Name != e) { if (xmlr.NodeType.ToString() == "Element") { Console.WriteLine(xmlr.Name); iterationResult.Add(xmlr.Name); recursive_read_first(xmlr.ReadSubtree(), xmlr.Name); } else if (xmlr.NodeType.ToString() == "Text") { Console.WriteLine(xmlr.Value); iterationResult.Add(xmlr.Value); } else if (xmlr.NodeType == XmlNodeType.EndElement) { Console.WriteLine("EndElement " + xmlr.Name); } } } result.Add(iterationResult); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д