Как понять, что не так с XML, не глядя на данные в этом XML

У меня есть несколько плохо сформированных XML-файлов с использованием Python, и мне нужно выяснить, что с ними не так (то есть, в чем заключаются ошибки), не просматривая данные (файлы являются конфиденциальными данными клиента).

Я полагаю, что должен быть способ дезинфицировать XML (т.е. удалить весь контент во всех узлах), но сохранить теги, чтобы я мог видеть любые структурные проблемы.

Однако ElementTree не возвращает никакой подробной информации о несовпадающих тегах - только номер строки и позицию символа, что бесполезно, если я не могу ссылаться на исходный XML.

Кто-нибудь знает, как я могу либо очистить XML, чтобы просмотреть его, либо получить более подробные сообщения об ошибках для плохо сформированного XML (который не возвращает содержимое тега)? Я мог бы написать клиентский синтаксический анализатор для удаления контента, но сначала я хотел исчерпать другие варианты.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
116
1

Ответы 1

Это достаточно сложная проблема, чтобы попытаться автоматически исправить проблемы с разметкой, когда вы жестяная банка просматриваете файл. Если вам не разрешено просматривать содержимое документа, забудьте о любой разумной надежде исправить такие дважды неопределенные проблемы.

Лучше всего исправить плохой XML в его источнике.

Если вы не можете этого сделать, я предлагаю вам использовать инструмент, указанный в Как разобрать неверный (плохой / неправильно сформированный) XML?, чтобы попытаться автоматически исправить проблему корректности. Затем, когда у вас действительно есть XML, вы можете использовать инструменты XML для удаления или дезинфекции контента (если это все еще необходимо на тот момент).

Мне не нужно устранять проблемы автоматически - мне просто нужно привести документ в состояние, при котором он сохраняет структуру, но не содержимое. Если я смогу взглянуть на это и определить искажения в XML, я могу исправить их в исходном коде.

khalid13 13.09.2018 17:32

Вы не можете знать предполагаемую структуру, когда разметка, которая передает эту структуру, не является правильно сформированной, потому что неправильное формирование обязательно означает, что структурная информация отсутствует (или повреждена, что в общем случае не лучше, чем ее отсутствие) .

kjhughes 13.09.2018 17:36

И вы не можете исправить проблемы вручную, не просматривая контент, поэтому ваш единственный вариант - исправить источник, генерирующий плохой XML, или попытаться автоматически исправить плохой XML, чтобы вам не нужно было видеть контент. См. Связанные вопросы и ответы о том, как это сделать.

kjhughes 13.09.2018 17:39

Управляет ли ты источником некорректно сформированного XML?

kjhughes 13.09.2018 19:09

своего рода - генератор - это длинный и неприятный метод с множеством путей кода, но да, я могу его изменить. В основном это работает, но я пытаюсь отловить крайние случаи, которые создают плохой XML, и исправить их. Для этого я хочу выяснить примеры того, что может пойти не так, чтобы я мог посмотреть на генератор и исправить его (опять же, не глядя на содержимое).

khalid13 13.09.2018 19:33

Тогда, учитывая, что вы не можете поделиться входными данными с неработающей программой, ни с выходом сломанной программы, ни с самой сломанной программой, я боюсь, что все, что осталось дать, таково: Исправьте неработающую программу. Извините, но вы не в состоянии просить о помощи, учитывая, что вы не можете поделиться чем-либо, что позволило бы кому-либо помочь вам.

kjhughes 13.09.2018 20:03

Я считаю, что сохранение структуры XML при удалении его содержимого не является необоснованным. Я буду работать над этим и отправлю ответ, когда у меня будет что-то сносное. Я не возражаю против того, чтобы сломанную программу нужно было исправить - я пытаюсь выяснить, какой набор входных данных приводит к ее поломке, чтобы исправить это путем обратного изучения структуры вывода.

khalid13 13.09.2018 21:01

Да, сохранение структуры XML при удалении его содержимого не является необоснованной просьбой, но у вас нет XML. У вас есть «XML», и в этом вся разница в мире: «XML» не может быть проанализирован, потому что «XML» не соответствует никаким стандартам или правилам. Это мой последний комментарий. Удачи.

kjhughes 14.09.2018 01:11

Другие вопросы по теме