标签:
python有三种方法解析XML,分别是SAX,DOM,以及ElementTree,其中ElmentTree比较容易使用,其API比较方便友好。代码可用性好,速度快,消耗内存少。
xml中的元素主要有:tag,value,attribute
一个简单的python 解析xml的例子如下:
Xml文件为: <?xml version="1.0" encoding="utf-8"?> <info> <list id='001' price="20" width="60"> <head>auto_userone</head> <name>Jordy</name> <number>12345678</number> </list> <list id='002' price="20" width="60"> <head>auto_usertwo</head> <name>tester</name> <number>34443678</number> </list> </info>
Python代码为:
# -*- coding: utf-8 -*- import xml.etree.ElementTree as et def print_node(node): print "===================================" print "node.tag:%s" % node.tag print "node.text:%s" % node.text print "node.attribute: %s" %node.attrib #读取xml文件 def load_xml_file(fileName): root =et.parse(fileName) nodes = root.getiterator("list") for node in nodes: print_node(node) if __name__ == '__main__': load_xml_file(r'sample.xml')
我们可以看到 xml的Attribute是一个字典,因此也可以用字典的方法遍历Attribute,获取具体属性的值。
def print_node(node): print "===================================" print "node.tag:%s" % node.tag print "node.text:%s" % node.text #print "node.attr:%s" % node.attrib mapAttrib=node.attrib for key in mapAttrib: print "%s=%s" %(key,mapAttrib[key])
如果知道具体attribute 的名字,也可以用get方法获取属性的值:
def print_node(node): print "===================================" print "node.tag:%s" % node.tag print "node.text:%s" % node.text print "id:%s" % node.get("id")
如何遍历xml的元素呢? ElementTree提供了四种方法,这四种方法分别是getiterator,getchildren,find 和findall,具体使用方法如下:
# -*- coding: utf-8 -*- import xml.etree.ElementTree as et def print_node(node): print "===================================" print "node.tag:%s" % node.tag print "node.text:%s" % node.text print "id:%s" % node.get("id") #读取xml文件 def load_xml_file(fileName): root =et.parse(fileName) #使用getiterator nodes = root.getiterator("list") for node in nodes: print_node(node) #使用getchildren() children = nodes[0].getchildren() for child in children: print_node(child) #使用find方法 specNode =root.find("list") if specNode is not None: print_node(specNode) #使用findall方法 node_findall = root.findall("list/name")[1] print_node(node_findall) if __name__ == '__main__': load_xml_file(r'F:\python\Advance\xml\sample.xml')
标签:
原文地址:http://blog.csdn.net/smartfox80/article/details/43113761