xml是可扩展标记语言,一种用于标记电子文件使其具有结构性的标记语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化程序。
可扩展标记语言用来传输和存储数据,焦点是数据的内容。超文本标记语言被设计来显示数据,焦点是数据的外观。
xml和json都是一种数据交换格式,xml由三个部分组成:
1.文档类型定义(Document Type Definition,DTD),就是xml的布局语言,规定文档的逻辑结构;
2.可扩展的样式语言(Extensible Style Language,XSl),是xml的样式表语言;
3.可扩展链接语言(Extensible Link language,XLL)。
python解析xml的三种方式:SAX,DOM,ElementTree。
1)SAX(simple API for XML)
python标准库解析SAX解析器,SAX用事件驱动模型,通过在解析xml的过程中触发一个个的事件并调用用户定义的回调函数来处理xml文件。
2)DOM(Document Object Model)
将xml数据在内存中解析成一个树,通过操作树来操作xml。
3)Elementtree(元素树)
ElementTree像轻量级的DOM。运行速度快,消耗内存少。
一、ElementTree基本用法
test.xml文件的内容:
</pre><?xml version="1.0" encoding="ISO-8859-1"?><note name='ss'><to>George</to><from>John</from><from>John2</from><heading>Reminder</heading><body no="2009081097"> <name>Hongten</name> <gender>M</gender> <age>20</age> <score subject="math">97</score> <score subject="chinese">90</score></body></note><pre name="code" class="html">
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
获取根节点、根节点的属性:
root = tree.getroot()
print root.tag # note
print root.attrib # {'name': 'ss'}
获取子节点、子节点的属性:
for child in root:
print child.tag,child.attrib
to {}
from {}
from {}
heading {}
body {'no': '2009081097'}
获取一个子节点,和子节点的内容:
print root.find('to').text # George
在节点中找到需要的节点:
for student in root.findall('body'):
no = student.get('no') # '2009081097'
name = student.find('name').text # 'Hongten'
for student in root.findall('body'):
attrib = student.find('score').attrib # {'subject': 'math'}
text = student.find('score').text # 97