Первым элементом в документе должен быть пролог.Здесь указывается версия xml, кодировка, является ли файл автономным, и, возможно, некоторые другие вещи.Пролог открывается с <?
.
После пролога есть метки с метаданными.Специальные теги, такие как комментарии, типы документов и определения элементов, должны начинаться с <!
.Обработка инструкций начинается с <?
.Здесь можно иметь вложенные теги, так как тег <!DOCTYPE
может содержать теги <!ELEMENT
и <!ATTLIST
в XML-документе в стиле dtd - подробный пример см. Википедия .
Должен быть ровно один элемент верхнего уровня.Это единственный без <!
или <?
предшествующий ему.После элемента верхнего уровня может быть больше тегов метаданных;сначала обработайте их.
Для явного анализа: сначала идентифицируйте теги - все они начинаются с <
- затем определите, какой это тег и как выглядит его закрытие.<!--
является тегом комментария, и не может иметь --
где-либо, кроме его конца.<?
оканчивается на ?>
.<!
заканчивается >
.Повторим: <!DOCTYPE
может иметь теги, вложенные до его закрытия, и могут быть другие вложенные теги, о которых я не знаю.
Как только вы найдете тег, вы захотите найти его закрывающий тег.Проверьте, является ли тег самозакрывающимся первым;в противном случае найдите его замыкание.
Для структур данных: я бы порекомендовал древовидную структуру, где каждый элемент является узлом, а каждый узел имеет индексированный / отображенный список подэлементов.
Очевидно,полный парсер потребует гораздо больше исследований;Надеюсь, этого достаточно, чтобы вы начали.