Доброго дня!
Прощу помощи в изобретении велосипеда.
Есть 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 к нему, но насколько я понял, кроме валидации, другого применения ему нет.
В данный момент склоняюсь к разбору с помощью регулярных выражений, но хочется верить, что есть более изящное решение.