Синтаксический анализ XML-файла в PYTHON с другим форматом

#python #xml

#python #xml

Вопрос:

Я предоставил XML-файл, попытался прочитать его на Python, используя следующий код:

 import xml.etree.ElementTree as ETree
parser = ETree.XMLParser(encoding="utf-8")
tree = ETree.parse("real.xml", parser=parser)
  

Я получал сообщение об ошибке, поэтому я попытался открыть XML в Notepad и заметил, что файл находится не в формате XML точно:

 > b'<?xml version="1.0" encoding="UTF-8" ?><root><id type="dict"><n123
> type="int">52</n123><n124 type="int">81</n124><n125
> type="int">22</n125><n126 type="int">94</n126><n127
> type="int">42</n127><n128 type="int">54</n128><n129
> type="int">94</n129><n130 type="int">34703</n130><n131
> type="int">20 ......... 
 </n141><n142 type="int">1</n142><n143
> type="int">2</n143></root>'
  

Выше приведен пример приведенного XML, как я должен справиться с этим в python.

Ответ №1:

Попробуйте эту библиотеку.

real.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<root>
<id type="dict">
    <n52383 type="int">52</n52383><n80958 type="int">81</n80958><n21669 type="int">22</n21669>
</id>
<address type=''dict''>
    <n52383 type="str">292 Lennox Street</n52383><n80958 type="str">72 Jones Road</n80958> ...........
</address>
</root>
  

пример

 from simplified_scrapy import SimplifiedDoc, utils
xml = utils.getFileContent('real.xml')
doc = SimplifiedDoc(xml)

ids = doc.select('id').children
print([(id.tag,id['type'],id.text) for id in ids])

addresses = doc.select('address').children
print([(addr.tag,addr['type'],addr.text) for addr in addresses])
  

Результат:

 [('n52383', 'int', '52'), ('n80958', 'int', '81'), ('n21669', 'int', '22')]
[('n52383', 'str', '292 Lennox Street'), ('n80958', 'str', '72 Jones Road')]
  

Вот еще примеры: https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples

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

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

2. @mishy Вставить печать (doc.html ), напечатанная строка XML. Тогда скажите мне, чего вы хотите. Позвольте мне привести вам пример.

3. После печати(doc.html) ——вывод стр форм—- б'<?xml version=»1.0″ encoding=»UTF-8″ ?><root><id type=»dict»><n52383 type=»int»>52</n52383><n80958 type=»int»>81</n80958><n21669 type=»int»>22</n21669></id><address type=»» dict»=»»><n52383 type=»str»>Улица 292 Леннокс </n52383><n80958 type=»str»>72 Джонс Дороги</n80958> ………..</root>Теперь я хочу создать таблицы данных из корневого XML ребенка, как имена и адреса и т. д.