这是使用LXML解析的最佳方法吗?

时间:2018-02-03 17:10:56

标签: python xml python-3.x parsing 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.x

1 个答案:

答案 0 :(得分:1)

我认为没有什么可以批评你的解析。特别是,它非常易读且易于理解。但是,我建议对if声明稍作调整。

  • 以这种方式编写它可以避免使用not,而not会增加一个额外的障碍来理解代码中的自然语言。
  • 我放弃了普通elif的{​​{1}}。
else