XML在Python中行走

时间:2012-11-20 02:36:52

标签: python xml lxml elementtree

我是python的新手,想了解解析xml。我还没有找到任何关于如何创建通用程序来处理XML节点集的很好的例子或解释。

我希望能够按名称和值对所有元素和属性进行分类和识别,而无需任何有关xml架构的信息。我不想依赖于标记名称或文本专门调用元素和属性。

有人可以指出我正确的方向吗?

由于

更新:

正在询问的具体问题是,“我如何在没有任何关于架构的深入知识的情况下,通常从XML文档中的根节点递归所有节点。”

当时,作为python的新手,并了解如何在许多其他语言中执行该操作,我被任何不依赖命名节点遍历DOM的现实世界示例所困惑,这不是我的意思想要的。

希望这澄清了这个问题,因为这个帖子中的信息确实很有用。

2 个答案:

答案 0 :(得分:4)

查看python帮助

ElementTree的文档

该页面的基本代码存根是:

    import xml.etree.ElementTree as ET
    tree = ET.parse(filename)
    root = tree.getroot()
    for child in root:  
      child.tag, child.attrib

你可以递归向下递送for child in root:,直到没有更多的孩子。

答案 1 :(得分:4)

使用cElementTree; 它比ElementTree的Python版本快15-20倍,并且使用的内存减少了2-5倍。 http://effbot.org/zone/celementtree.htm

import xml.etree.cElementTree as ET
tree = ET.parse('test.xml')
for elem in tree.getiterator():
    if elem.tag:
        print 'my name:'
        print '\t'+elem.tag
    if elem.text:
        print 'my text:'
        print '\t'+(elem.text).strip()
    if elem.attrib.items():
        print 'my attributes:'
        for key, value in elem.attrib.items():
            print '\t'+'\t'+key +' : '+value
    if list(elem): # use elem.getchildren() for python2.6 or before
        print 'my no of child: %d'%len(list(elem))
    else:
        print 'No child'
    if elem.tail:
        print 'my tail:'
        print '\t'+'%s'%elem.tail.strip()
    print '$$$$$$$$$$'