在python中遍历XML的更快捷方式?

时间:2015-05-08 21:15:03

标签: python xml performance parsing xml-parsing

我有这个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循环,但有更快或更优雅的方式吗?

2 个答案:

答案 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())