Каким образом парсить\разбирать XML подобного вида?

Доброго дня!

Прощу помощи в изобретении велосипеда.

Есть xml файл формата:
Разбил переносами и урезал длину строки для повышения читаемости. В оригинале порядка 80к строк, по 20 атрибутов в каждой.

<xml>
	<Detail_collection>
		<Detail 
			Полное_и_сокращенное_наименование_организации="Общество с ограниченной ответственностью "РогаИКо" Сокращенно: ООО "РогаИКо"" 
			ИНН_организации="0123456789" 
			КПП_организации="123456789" 
			Адрес__место_нахождения___организации="РОССИЯ,0123456,"Кукуево г,,Затерянная ул,15/7,," 
			Адрес_электронной_почты_организации="none@none.net"  />
		<Detail Полное_и_сокращенное_наименование_организации="..".." />
		<Detail Полное_и_сокращенное_наименование_организации="..".." />
</Detail_collection>
</xml>


Необходимо выдернуть из него значения атрибутов с дальнешим занесением в бд.

Тренировался на упрощенном варианте:

<?xml version="1.0" encoding="utf-8" ?> 
<xml>
    <Detail_collection>
        <Detail text1="sometext11" text2="sometext21" text3="sometext31" />
        <Detail text1="sometext12" text2="sometext22" text3="sometext32" />
    </Detail_collection>
</xml>


import xml.etree.cElementTree as ET
from SQL_worker import Write_to_SQL

tree = ET.parse("data.xml")
root = tree.getroot()

for data in root.findall(".//Detail"):
    a = (data.attrib["text1"])
    b = (data.attrib["text2"])
    c = (data.attrib["text3"])
    Write_to_SQL(a, b, c)


Такой код отлично отрабатывает "упрощенный пример".
Но оригинальный документ вылетает ещё при парсинге с ошибкой:

xml.etree.ElementTree.ParseError: not well-formed (invalid token)

Ссылаясь на первый же фрагмент с "лишними" кавычками.

Методов нормализации такого файла для последующего парсинга я не нашел.

Есть XML-schema к нему, но насколько я понял, кроме валидации, другого применения ему нет.
В данный момент склоняюсь к разбору с помощью регулярных выражений, но хочется верить, что есть более изящное решение.
  • Вопрос задан
  • 377 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Тут, IMHO, токмо регуляркой разбирать. Тот, кто этот xml готовил забыл кавычки преобразовать, возможно и другие символы тоже.
Если все атрибуты идут в одном порядке, то, в принципе, разобрать несложно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы