# XML Parser
> ВАЖНО!!! README.md сгенерировано автоматически, поэтому может содержать неточности.
Модуль для извлечения структурированной информации из XML-файлов документов.
## Общий процесс парсинга
1. Рекурсивный поиск всех XML-файлов в указанной директории
2. Для каждого файла:
- Извлечение основной информации (статус, владелец, название)
- При необходимости извлечение содержимого (таблицы и текст)
3. Фильтрация документов по статусу
4. Формирование итоговой коллекции документов
## Подробное описание компонентов
### XMLParser
Основной класс, координирующий работу всех парсеров. Использует три специализированных парсера:
- XMLInfoParser - для основной информации
- XMLTableParser - для таблиц
- XMLTextParser - для текстового содержимого
### XMLInfoParser
Извлекает основную информацию о документе:
1. Находит специальные теги (STATUS_TAG, OWNER_TAG, NAME_TAG)
2. Извлекает значения между тегами `` и ``
3. Проверяет статус документа (только USEFUL_STATUSES)
4. Формирует объект ParsedXML
### XMLTableParser
Обрабатывает таблицы в документе:
1. Находит все блоки таблиц (``)
2. Определяет тип таблицы (обычная/сокращения/регламентирующие документы)
3. Извлекает строки (``) и ячейки (``)
4. Обрабатывает специальные случаи (таблицы с шапкой)
5. Формирует текстовое представление таблиц
### XMLTextParser
Очищает текст от XML-разметки:
1. Удаляет таблицы
2. Удаляет бинарные данные
3. Удаляет специальные конструкции (KCC, CC patterns)
4. Очищает от XML-тегов
5. Обрабатывает специальные символы
## Структуры данных
- ParsedXML - информация об одном документе
- ParsedXMLs - коллекция документов
- ParsedTable - данные одной таблицы
- ParsedTables - коллекция таблиц
- ParsedRow - данные одной строки таблицы
## Особенности реализации
1. Кодировка по умолчанию: cp866
2. Фильтрация по статусам: 'Актуальный', 'Требует актуализации', 'Упразднён'
3. Специальная обработка таблиц сокращений и регламентирующих документов
4. Возможность исключения определенных файлов при парсинге
5. Опциональное извлечение содержимого (флаг include_content)
## Использование
```python
from components.parser.xml.xml_parser import XMLParser
# Создание парсера
parser = XMLParser()
# Парсинг одного файла
result = parser.parse("path/to/file.xml", include_content=True)
# Парсинг всех файлов в директории
results = parser.parse_all(
"path/to/dir",
encoding='cp866',
include_content=True,
ignore_files_contains=['temp', 'draft']
)
```