【发布时间】:2018-02-03 17:10:56
【问题描述】:
我是 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
【问题讨论】:
-
所以你的目标是打印它吗?对于这种特殊情况,我认为不会有更好的方法。
-
现在我只是打印以确保在继续处理数据之前可以提取我需要的数据字段。
-
XPath 是一个很好的选择
-
这取决于你想做什么。据我所知,没有更好的方法可以做到这一点,除了递归,或者将某些部分放在其他函数中。
-
我只是想确保我这样做是正确的 ...如果代码呈现您想要的输出,那就是正确的。现在,效率、优化、最佳实践是一个不同的问题,应该在CodeReview 上提问,因为 SO 是针对出错或产生不希望的结果的代码。
标签: python xml python-3.x parsing lxml