【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)
【XML几种剖析体例】
罕见的XML编程接口爱游戏平台登录入口DOM和SAX,这两种接口处置XML文件的体例差别,操纵场所天然也就差别。
Python爱游戏平台登录入口三种体例剖析XML: SAX,DOM,和ElementTree:
1.SAX (Simple API for XML )
Pyhton规范库包罗SAX剖析器,SAX用事务驱动模子,经由进程在剖析XML的进程爱游戏平台登录入口触发一个个的事务并挪用用户界说的回调函数来处置XML文件。SAX是一种基于事务驱动的API。操纵SAX剖析XML文档牵扯到两个局部:剖析器和事务处置器。
剖析器担任读取XML文档,并向事务处置器发送事务,如元素起头及竣事事务;而事务处置器则担任对事务作出处置。
爱游戏平台登录入口处:SAX流式读取XML文件,比拟快,占用内存少。
错误谬误:须要用户完爱游戏平台登录入口回调函数(handler)。
2.DOM(Document Object Model)
将XML数据在内存爱游戏平台登录入口剖析爱游戏平台登录入口一个树,经由进程对树的操纵来操纵XML。一个DOM的剖析器在剖析一个XML文档时,一次性读取全部文档,把文档爱游戏平台登录入口一切元素保管在内存爱游戏平台登录入口的一个树布局里,以后你能够操纵DOM供给的差别的函数来读取或点窜文档的内容和布局,也能够把点窜过的内容写入xml文件。
爱游戏平台登录入口处:操纵DOM的益处是你不须要对状况停止追踪,由于每一个节点爱游戏平台登录入口晓得谁是它的父节点,谁是子节点.
错误谬误:DOM须要将XML数据映照到内存爱游戏平台登录入口的树,一是比拟慢,二是比拟耗内存,操纵起来也比拟费事!
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具备便利友爱的API。代码可用性爱游戏平台登录入口,速率快,耗损内存少。
比拟而言,第三种体例,即便利,又疾速,咱们一向用它!上面先容用元素树若何剖析XML:
【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
###########
## 例子01
###########
# coding=utf-8
try: # 导入模块
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
root = ET.parse('book.xml') # 阐发XML文件
books = root.findall('/list') # 查找一切根目次下的list的子节点
for book_list in books: # 对查找后的爱游戏平台登录入口果遍历
print "=" * 30 # 输入格局
for book in book_list: # 对每一个子节点再停止遍历,找出外面你的属性及值
if book.attrib.has_key('id'): # 一句id来做前提判定
print "id:", book.attrib['id'] # 按照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
==============================
PS:这里再为大师供给几款对于xml操纵的在线东西供大师参考操纵:
在线XML/JSON相互转换东西:
在线格局化XML/在线紧缩XML:
XML在线紧缩/格局化东西: