我是python的新手,想了解解析xml。我还没有找到任何关于如何创建通用程序来处理XML节点集的很好的例子或解释。
我希望能够按名称和值对所有元素和属性进行分类和识别,而无需任何有关xml架构的信息。我不想依赖于标记名称或文本专门调用元素和属性。
有人可以指出我正确的方向吗?
由于
更新:
正在询问的具体问题是,“我如何在没有任何关于架构的深入知识的情况下,通常从XML文档中的根节点递归所有节点。”
当时,作为python的新手,并了解如何在许多其他语言中执行该操作,我被任何不依赖命名节点遍历DOM的现实世界示例所困惑,这不是我的意思想要的。
希望这澄清了这个问题,因为这个帖子中的信息确实很有用。
答案 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 '$$$$$$$$$$'