我有这个xml文件布局,我想提取所有子名称(Amy,Max和Derek):
<data>
<dataentry>
<Name>John</Name>
<Birthday>3/3/93</BirthDay>
<Children>
<Child> Amy </Child>
<Child> Max </Child>
<Child> Derek </Child>
</Children>
</dataentry>
<dataentry>
....
</dataentry>
</data>
Python代码:
root = tree.getroot()
for dataentry in root.findall('dataentry'):
for children in dataentry.findall('Children'):
for child in children.findall('Child'):
print child.text
我有这个嵌套for循环,但有更快或更优雅的方式吗?
答案 0 :(得分:1)
您可以使用xpath()
:
for child in root.xpath("./dataentry/Children/Child"):
print child.text
考虑到data
是您的根。
答案 1 :(得分:0)
您可以使用SAX解析器执行此操作。这个想法是解析器将在遍历时执行操作,而不是将所有内容读入树中并在以后搜索子项。这节省了内存和时间。但是,无论路径如何,都会打印所有 child
个节点,因此它可能是您想要的,也可能不是。
from xml import sax
class SAXParser(sax.ContentHandler):
def __init__(self):
self.current_string = None
def characters(self, content):
self.current_string = content
def endElement(self, name):
if name == 'Child':
print self.current_string
sax.parseString(<string_to_parse>, SAXParser())