Анализ несогласованного XML-файла в Python для загрузки его в БД с помощью Django

#python #xml #parsing

#питон #xml #синтаксический анализ #python

Вопрос:

Я пытаюсь проанализировать XML-файл, содержащий несколько элементов следующей структуры:

 <root attribute_xmlns=date_as_str>
    <element1 attrib1="str" attrib2="str" attrib3="str" attrib4="str">
        <element2>
            <element21>Some text</element21>
            <element22>Some other text</element22>
        </element2>
        <element3>
            <element31 attrib1="str" attrib2="str" attrib3="str"/>
            <element32 attrib1="str" attrib3="str"/>
            <element33 attrib1="str" attrib2="str" attrib3="str" attrib4="str"/>
        </element3>
    </element1>
</root>
  

Некоторая информация, которую я хочу получить, хранится в текстах атрибутов элементов, а некоторая — в тексте элемента.

Я пытался сохранить его в формате CSV с xml.etree.ElementTree помощью итерации по каждому уровню файла и получения последовательного текста атрибутов и элементов. Проблема, однако, в том, что файл внутренне несогласован. В некоторых элементах могут отсутствовать атрибуты или элементы не имеют значения. В таких случаях мой окончательный CSV-файл — это просто большой беспорядок.

Как я могу это сделать? Мой план состоит в том, чтобы загрузить эти данные в базу данных SQL в приложении Django.

Комментарии:

1. Правильный способ обработки недопустимого XML — это отклонить его. Если вы все еще хотите использовать, вы должны знать, что находитесь на неизведанной территории, и все гарантии отключены. Вы можете попробовать использовать другую библиотеку, которая может быть более щадящей, например beautifulsoup , или вы можете реализовать свой собственный анализатор.

2. Ну, с вами трудно не согласиться, и если бы мне не пришлось с этим справляться — я бы не стал. Однако анализ XML-данных BeautifulSoup кажется многообещающим. Спасибо!

3. Я не знаю, каким бизнесом вы занимаетесь, но simeone, должно быть, создал этот файл, и, возможно, можно попросить их исправить ошибки 😉