У меня есть несколько плохо сформированных XML-файлов с использованием Python, и мне нужно выяснить, что с ними не так (то есть, в чем заключаются ошибки), не просматривая данные (файлы являются конфиденциальными данными клиента).
Я полагаю, что должен быть способ дезинфицировать XML (т.е. удалить весь контент во всех узлах), но сохранить теги, чтобы я мог видеть любые структурные проблемы.
Однако ElementTree не возвращает никакой подробной информации о несовпадающих тегах - только номер строки и позицию символа, что бесполезно, если я не могу ссылаться на исходный XML.
Кто-нибудь знает, как я могу либо очистить XML, чтобы просмотреть его, либо получить более подробные сообщения об ошибках для плохо сформированного XML (который не возвращает содержимое тега)? Я мог бы написать клиентский синтаксический анализатор для удаления контента, но сначала я хотел исчерпать другие варианты.
Это достаточно сложная проблема, чтобы попытаться автоматически исправить проблемы с разметкой, когда вы жестяная банка просматриваете файл. Если вам не разрешено просматривать содержимое документа, забудьте о любой разумной надежде исправить такие дважды неопределенные проблемы.
Лучше всего исправить плохой XML в его источнике.
Если вы не можете этого сделать, я предлагаю вам использовать инструмент, указанный в Как разобрать неверный (плохой / неправильно сформированный) XML?, чтобы попытаться автоматически исправить проблему корректности. Затем, когда у вас действительно есть XML, вы можете использовать инструменты XML для удаления или дезинфекции контента (если это все еще необходимо на тот момент).
Вы не можете знать предполагаемую структуру, когда разметка, которая передает эту структуру, не является правильно сформированной, потому что неправильное формирование обязательно означает, что структурная информация отсутствует (или повреждена, что в общем случае не лучше, чем ее отсутствие) .
И вы не можете исправить проблемы вручную, не просматривая контент, поэтому ваш единственный вариант - исправить источник, генерирующий плохой XML, или попытаться автоматически исправить плохой XML, чтобы вам не нужно было видеть контент. См. Связанные вопросы и ответы о том, как это сделать.
Управляет ли ты источником некорректно сформированного XML?
своего рода - генератор - это длинный и неприятный метод с множеством путей кода, но да, я могу его изменить. В основном это работает, но я пытаюсь отловить крайние случаи, которые создают плохой XML, и исправить их. Для этого я хочу выяснить примеры того, что может пойти не так, чтобы я мог посмотреть на генератор и исправить его (опять же, не глядя на содержимое).
Тогда, учитывая, что вы не можете поделиться входными данными с неработающей программой, ни с выходом сломанной программы, ни с самой сломанной программой, я боюсь, что все, что осталось дать, таково: Исправьте неработающую программу. Извините, но вы не в состоянии просить о помощи, учитывая, что вы не можете поделиться чем-либо, что позволило бы кому-либо помочь вам.
Я считаю, что сохранение структуры XML при удалении его содержимого не является необоснованным. Я буду работать над этим и отправлю ответ, когда у меня будет что-то сносное. Я не возражаю против того, чтобы сломанную программу нужно было исправить - я пытаюсь выяснить, какой набор входных данных приводит к ее поломке, чтобы исправить это путем обратного изучения структуры вывода.
Да, сохранение структуры XML при удалении его содержимого не является необоснованной просьбой, но у вас нет XML. У вас есть «XML», и в этом вся разница в мире: «XML» не может быть проанализирован, потому что «XML» не соответствует никаким стандартам или правилам. Это мой последний комментарий. Удачи.
Мне не нужно устранять проблемы автоматически - мне просто нужно привести документ в состояние, при котором он сохраняет структуру, но не содержимое. Если я смогу взглянуть на это и определить искажения в XML, я могу исправить их в исходном коде.