6

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

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

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

谢谢

更新:

被问到的具体问题是,“我一般如何在不了解模式的情况下从 XML 文档中的根节点递归所有节点。”

当时,我刚接触 python 并了解如何在许多其他语言中执行该操作,我对任何不依赖命名节点遍历 DOM 的真实示例感到困惑,这根本不是我想要的.

希望这可以澄清问题,因为该线程中的信息确实很有用。

4

2 回答 2

6

在 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:向下递归运行,直到不再有孩子为止。

于 2012-11-20T03:04:42.623 回答
5

使用 cElementTree;它比 Python 版本的 ElementTree 快 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 '$$$$$$$$$$'
于 2012-11-20T07:14:38.207 回答