Разбор документов XML с помощью lxml


Я новичок на lxml, и парсинг XML-документов в целом. Я написал небольшой фрагмент кода, который появляется, чтобы делать то, что мне нужно это тоже делать, но похоже у меня слишком сложным. Есть ли способ я могу упростить это?

Метод:

def importFromXML(self, filename):
    tree = etree.parse(filename)
    for child in tree.getroot():
        if child.tag != 'SLOT':
            print('Tag:', child.tag, ', Text', child.text)
        elif child.tag == 'SLOT':
            for slot, index in child.items():
                for attribute in child:
                    print('Slot Number =', index, ', Tag:', attribute.tag, ', Value:', attribute.text)

XML-код:

<?xml version="1.0" encoding="UTF-8"?>
<Item>
<ActiveState>drop</ActiveState>
<Location>Left Wrist</Location>
<Realm>All</Realm>
<ItemName>Band of the Dream Conqueror</ItemName>
<ItemQuality>100</ItemQuality>
<Equipped>1</Equipped>
<Level>50</Level>
<TYPE>Wrist</TYPE>
<SOURCE>Drop</SOURCE>
<DBSOURCE>kscraft</DBSOURCE>
<SLOT Number="0">
    <Type>Resist</Type>
    <Effect>Crush</Effect>
    <Amount>6</Amount>
</SLOT>
<SLOT Number="1">
    <Type>Resist</Type>
    <Effect>Thrust</Effect>
    <Amount>6</Amount>
</SLOT>
<SLOT Number="2">
    <Type>Resist</Type>
    <Effect>Slash</Effect>
    <Amount>6</Amount>
</SLOT>
</Item>

Я просто хочу убедиться, что я делаю это правильно. Я с помощью Python 3.х. В конце концов я буду делать больше с данными, я тяну, но сейчас я просто пытаюсь вытянуть информацию, и выяснить наиболее оптимальный способ сделать это.



276
2
задан 3 февраля 2018 в 06:02 Источник Поделиться
Комментарии
1 ответ

Код на самом деле не делает много, есть чуть-чуть если честно, это не очень сложно, что это такое. Конечно не просто все за пару циклов, может иметь несколько обработчиков для отправки по тегам или так (handlers[child.tag](child) ...).

Я полагаю, если ты хочешь относительно быстрый способ, чтобы написать этот код импортера, рассмотрим выражение XPath. Если вы хотели быстрое оформление (не здание до полного DOM в памяти), рекомендуется использовать саксофон обработчик.

Наконец, там может быть библиотека для автоматического сопоставления XML в классовой структуры, или даже разобрать его прямо на dict экземпляры или что-то, если вы предпочитаете, но я не снял шляпу.

0
ответ дан 3 февраля 2018 в 08:02 Источник Поделиться