【XML基本概念介绍】
XML 指可扩展标记语言(eXtensible Markup Language)。
XML 被设计用来传输和存储数据。
概念一:
<foo> # foo元素的起始标签 </foo> # foo元素的结束标签 # note: 每一个起始标签必须有对应的结束标签来闭合, 也可以写成<foo/>
概念二:
<foo> # 元素可以嵌套到任意参次 <bar></bar> # bar元素为foo元素的子元素 </foo> # 父元素foo的结束标签
概念三:
<foo lang=‘EN‘>#foo元素有个lang的属性,该属性值为:EN 对应Python字典Name-Value对 <bar id=‘001‘ lang="CH"></bar> # bar元素有个lang的属性,该属性值为:CH;还有个id属性,值为:001,放置在‘‘或“”中; </foo> # bar元素中的lang属性不会和foo元素中相冲突,每个元素都有独立的属性集;
概念四:
<title>Learning Python</title> # 元素可以有文本内容 # Note:如果一个元素即没有文本内容,也没有子元素,则为空元素。
概念五:
<info> # info元素为根节点 <list id=‘001‘> A </list> # list元素为子节点 <list id=‘002‘> B </list> <list id=‘003‘> C </list> </info>
概念六:
<feed xmlns=‘http://www.w3.org/2005/Atom‘>#可以通过声明xmlns来定义默认名字空间,feed元素处于http://www.w3.org/2005/Atom命名空间中 <title>dive into mark</title>#title元素也是。名字空间声明不仅会作用于当前声明它的元素,还会影响到该元素的所有子元素 </feed>#也可以通过xmlns:prefix声明来定义一个名字空间并取其名为prefix。然后该名字空间中的每个元素都必须显式地使用这个前缀(prefix)来声明。 <atom:feed xmlns:atom=‘http://www.w3.org/2005/Atom‘> # feed属于命名空间atom <atom:title>dive into mark</atom:title>#title元素同样属于该命名空间 </atom:feed> # xmlns(XML Name Space)
【ElementTree解析】
两种实现
ElementTree生来就是为了处理XML ,它在Python标准库中有两种实现。
一种是纯Python实现,例如: xml.etree.ElementTree
另外一种是速度快一点的: xml.etree.cElementTree
尽量使用C语言实现的那种,因为它速度更快,而且消耗的内存更少! 在程序中可以这样写:
try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET
常用方法
# 当要获取属性值时,用attrib方法。 # 当要获取节点值时,用text方法。 # 当要获取节点名时,用tag方法。
示例XML
<?xml version="1.0" encoding="utf-8"?> <info> <intro>Book message</intro> <list id=‘001‘> <head>bookone</head> <name>python check</name> <number>001</number> <page>200</page> </list> <list id=‘002‘> <head>booktwo</head> <name>python learn</name> <number>002</number> <page>300</page> </list> </info>
加载XML
root = ET.parse(‘book.xml’)
加载字符串
root = ET.fromstring(xmltext)
获得指定节点:
方法一:获得指定节点->getiterator()方法
book_node = root.getiterator(‘list‘)
方法二:获得指定节点->findall()方法
book_node = root.findall(‘list‘)
方法三:获得指定节点->find()方法
book_node = root.find(‘list‘)
方法四:获得儿子节点->getchildren()
for node in book_node:
book_node_child = node.getchildren()[0]
print book_node_child.tag, ‘=> ‘, book_node_child.text
示例:
try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.cElementTree as ET root = ET.parse(r‘I:\PythonTest\book.xml‘) #加载文件 books = root.findall(‘./list‘) for book_list in books: print(‘=‘*30) for book in book_list: if id in book.attrib : print(‘id:‘,book.attrib[‘id‘]) print(book.tag + ‘==>‘ + book.text) print(‘=‘*30)
输出结果:
============================== head==>bookone name==>python check number==>001 page==>200 ============================== head==>booktwo name==>python learn number==>002 page==>300 ==============================
转自:http://www.jb51.net/article/67120.htm
Python-elementTree方法解析xml文件-01
原文:http://www.cnblogs.com/rusking/p/5107934.html