Парсим какой-нибудь XML
Каждый, кто написал в жизни хоть строчку кода, слышал такое выражение – не нужно изобретать велосипед, то есть, зачем писать то, что уже написано. И мы полностью согласны с этой мыслью — зачем изобретать велосипед, когда им уже можно с удовольствием пользоваться. Тема парсинга XML уже разобрана не раз, поэтому прокатимся на велосипеде парсинга XML по документам с неизвестной структурой.
В сети существует множество руководств, где авторы бодро разбирают структуру XML известного документа – решительно находят root у дерева, после чего мужественно пробегают циклом по тэгам, при этом циклы используют столько раз, сколько уровней вложенности у документа. Это все хорошо и отлично, когда мы знаем сколько раз нужно натравить цикл на очередной уровень вложенности.
Но у нас возникла задача, с которой мы еще не сталкивались, когда есть много документов XML, а документации по структуре данных нет, вообще. Нет, не та… . НЕТ вообще!. Как в таком случае, мы с помощью имеющегося опыта можем опознать структуру и глубину текущих файлов?
Данные XML хранятся в базе в текстовом виде — xml_text. Для начала считаем и опознаем то, что можно – получим root документа – он есть у всех.
Так как у нас нет никакой гарантии, что файл, который будет записан завтра, не будет иметь другую структуру, для начала, прокатимся на велосипеде рекурсивного алгоритма, и получим структуру в линейном виде. Так как нам важен порядок, то сохранять данные будем в список с именем xml_data.
Результат работы сохранен в список xml_data и имеет следующую структуру — список кортежей, где каждый кортеж — это уровень вложения от корневого тэга, наименование тэга и значение тэга.
Полученный список уже можно разносить по таблицам для формирования реляционной БД. Каждый уровень вложения — это новая таблица (наименование столбца — наименование тэга xml, значения в столбце – значения тэга xml). Так, уровень вложения 1 — это новая таблица, она связана с таблицей из данных уровня 0 через ключевое поле (внешний ключ). Каждое последующее вложение — это новая таблица, логика связи с таблицей предыдущего уровня такая же.
Реализация данного проекта позволила еще раз на практике доказать, что многое уже придумали за нас и, прежде чем изобретать что-то новое, нужно максимально использовать прошлый опыт и ранее написанный код.
Проверенные AI решения, ага
🤷♀️🤦♀️
Leha, поделитесь, пожалуйста, с чем не согласны. Где-то ошибка/опечатка? Будем признательны
Я имел ввиду что название вашего блога прописано как AI решения.
А в посте две строчки кода