Рекурсивное чтение 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д