lxml xars, отсутствует корневая ошибка - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь проанализировать XML-файл, чтобы я мог работать с данными, содержащимися в нем.

Это 9 миллионов строк, поэтому я не буду это публиковать.

Вот мой код:

from lxml import etree

parser = etree.XMLParser(recover = True, encoding = 'utf-16')

tree = etree.parse('xml_parts.xml', parser)

ns = {'d': 'http://www.w3.org/2001/XMLSchema-instance'}

tree.find('d:database', ns)

Вот первый раздел XML-файла (он имеет кодировку utf-16, но не указан в заголовке):

<?xml version="1.0"?>
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<database name="parts_bbdb">
  <table_structure name="parts">
    <field Field="part_id" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" Comment="" />

Я получаю ошибку:

Traceback (most recent call last):
File "./AtomParse", line 13, in <module>
tree.find('{http://www.w3.org/2001/XMLSchema-instance}database')
File "src/lxml/etree.pyx", line 2208, in lxml.etree._ElementTree.find (src/lxml/etree.c:68635)
File "src/lxml/etree.pyx", line 1876, in lxml.etree._ElementTree._assertHasRoot (src/lxml/etree.c:65215)
AssertionError: ElementTree not initialized, missing root 

Я никогда раньше не анализировал XML, но, прочитав документацию по lxml, я подумал, что это должно сработать.

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

Если кто-нибудь может указать мне правильное направление, это было бы здорово, спасибо!

Edit:

<row>
    <field name="part_id">2557</field>
    <field name="ok">0</field>
    <field name="part_name">BBa_S01288</field>
    <field name="short_desc">Intermediate part from assembly 236</field>
    <field name="description" xsi:nil="true" />
    <field name="part_type">Intermediate</field>
    <field name="author">Randy Rettberg</field>
    <field name="owning_group_id">7</field>
    <field name="status">Deleted</field>
    <field name="dominant">0</field>
    <field name="informational">0</field>
    <field name="discontinued">1</field>
    <field name="part_status"></field>
    <field name="sample_status">Discontinued</field>
    <field name="p_status_cache"></field>
    <field name="s_status_cache"></field>
    <field name="creation_date">2003-12-03</field>
    <field name="m_datetime">2015-05-08 14:14:17</field>
    <field name="m_user_id">0</field>
    <field name="uses">0</field>
    <field name="doc_size">686</field>
    <field name="works"></field>
    <field name="favorite">0</field>
    <field name="specified_u_list">_149_156_603_145_193_147_161_603_145_</field>
    <field name="deep_u_list">_149_156_603_145_193_147_161_603_145_</field>
    <field name="deep_count">9</field>
    <field name="ps_string" xsi:nil="true" />
    <field name="scars"></field>
    <field name="default_scars"></field>
    <field name="owner_id">24</field>
    <field name="group_u_list">_1_</field>
    <field name="has_barcode">0</field>
    <field name="notes" xsi:nil="true" />
    <field name="source"></field>
    <field name="nickname"></field>
    <field name="categories">//classic/intermediate/uncategorized</field>
    <field name="sequence">tcacacaggaaa</field>
    <field name="sequence_sha1">÷?¾TŸ]°f ÜèÕ?]Mò</field>
    <field name="sequence_update">5</field>
    <field name="seq_edit_cache">&lt;script 

В приведенном выше коде я считаю, что проблемы с кодировкой связаны с 3-й строкой снизу в sequence_sha1. Есть 400000 таких блоков, каждая из которых имеет одну строку.

...