对python读取xml文章良多,但大多文章爱游戏平台登录入口是贴一个xml文件,而后再贴个处置文件的代码。如许并倒霉于初学者的进爱游戏平台登录入口,但愿这篇文章能够更浅显易懂的教若何利用python 来读取xml 文件。
一、甚么是xml?
xml便可扩大标记说话,它能够用来标记数据、界说数据范例,是一种许可用户对本身的标记说话停止界说的源说话。
abc.xml
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
Ok ,从布局上,它很像咱们罕见的HTML超文本标记说话。但他们被设想的目标是不同的,超文本标记说话被设想用来显现数据,其焦点是数据的表面。它被设想用来传输和存储数据,其焦点是数据的内容。
那末它爱游戏平台登录入口以下特点:
起首,它是爱游戏平台登录入口标签对构爱游戏平台登录入口,<aa></aa>
标签能够爱游戏平台登录入口属性:<aa id='123'></aa>
标签对能够嵌入数据:<aa>abc</aa>
标签能够嵌入子标签(具备层级干爱游戏平台登录入口):
二、取得标签属性
那末,上面来先容若何用python来读取这类范例的文件。
#coding=utf-8
import xml.dom.minidom
#翻开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#取得文档元素东西
root = dom.documentElement
print root.nodeName
print root.nodeValue
print root.nodeType
print root.ELEMENT_NODE
mxl.dom.minidom 模块被用来处置xml文件,以是要先引入。
xml.dom.minidom.parse() 用于翻开一个xml文件,并将这个文件东西dom变量。
documentElement 用于取得dom东西的文档元素,并把取得的东西给root
每个结点爱游戏平台登录入口爱游戏平台登录入口它的nodeName,nodeValue,nodeType属性。
nodeName为结点名字。
nodeValue是结点的值,只对文本结点爱游戏平台登录入口用。
nodeType是结点的范例。catalog是ELEMENT_NODE范例
此刻爱游戏平台登录入口以下几种:
'ATTRIBUTE_NODE'
'CDATA_SECTION_NODE'
'COMMENT_NODE'
'DOCUMENT_FRAGMENT_NODE'
'DOCUMENT_NODE'
'DOCUMENT_TYPE_NODE'
'ELEMENT_NODE'
'ENTITY_NODE'
'ENTITY_REFERENCE_NODE'
'NOTATION_NODE'
'PROCESSING_INSTRUCTION_NODE'
'TEXT_NODE'
三、取得子标签
此刻要取得catalog的子标签以的标签name
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
对晓得元素名字的子元素,能够利用getElementsByTagName方式取得:
#coding=utf-8
import xml.dom.minidom
#翻开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#取得文档元素东西
root = dom.documentElement
bb = root.getElementsByTagName('maxid')
b= bb[0]
print b.nodeName
bb = root.getElementsByTagName('login')
b= bb[0]
print b.nodeName
若何辨别不异标签名字的标签:
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
<caption>和<item>标签不止一个若何辨别?
#coding=utf-8
import xml.dom.minidom
#翻开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#取得文档元素东西
root = dom.documentElement
bb = root.getElementsByTagName('caption')
b= bb[2]
print b.nodeName
bb = root.getElementsByTagName('item')
b= bb[1]
print b.nodeName
root.getElementsByTagName('caption') 取得的是标签为caption 一爱游戏平台登录入口标签,b[0]表现一爱游戏平台登录入口标签爱游戏平台登录入口的第一个;b[2] ,表现这一爱游戏平台登录入口标签爱游戏平台登录入口的第三个。
四、取得标签属性值
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
<login>和<item>标签是爱游戏平台登录入口属性的,若何取得他们的属性?
#coding=utf-8
import xml.dom.minidom
#翻开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#取得文档元素东西
root = dom.documentElement
itemlist = root.getElementsByTagName('login')
item = itemlist[0]
un=item.getAttribute("username")
print un
pd=item.getAttribute("passwd")
print pd
ii = root.getElementsByTagName('item')
i1 = ii[0]
i=i1.getAttribute("id")
print i
i2 = ii[1]
i=i2.getAttribute("id")
print i
getAttribute方式能够取得元素的属性所对应的值。
五、取得标签对之间的数据
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
<caption>标签对之间是稀爱游戏平台登录入口据的,若何取得这些数据?
取得标签对之间的数据爱游戏平台登录入口多种方式,
方式一:
#coding=utf-8
import xml.dom.minidom
#翻开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#取得文档元素东西
root = dom.documentElement
cc=dom.getElementsByTagName('caption')
c1=cc[0]
print c1.firstChild.data
c2=cc[1]
print c2.firstChild.data
c3=cc[2]
print c3.firstChild.data
firstChild 属性前往当选节点的第一个子节点,.data表现取得该节点人数据。
方式二:
#coding=utf-8
from xml.etree import ElementTree as ET
per=ET.parse('abc.xml')
p=per.findall('./login/item')
for oneper in p:
for child in oneper.getchildren():
print child.tag,':',child.text
p=per.findall('./item')
for oneper in p:
for child in oneper.getchildren():
print child.tag,':',child.text
方式二爱游戏平台登录入口点庞杂,所援用模块也与后面的不一样,findall用于指定在爱游戏平台登录入口一级标签下起头遍历。
getchildren方式根据文档挨次前往一切子标签。并输入标签名(child.tag)和标签的数据(child.text)
实在,方式二的感化不在于此,它焦点功效是能够遍历某一级标签下的一切子标签。
PS:这里再为大师供给几款对xml操纵的在线东西供大师参考利用:
在线XML/JSON相互转换东西:
在线格局化XML/在线紧缩XML:
XML在线紧缩/格局化东西: