什麼是xml?
xml即可擴充套件標記語言,它可以用來標記資料、定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。
abc.xml
複製**
<?xml version="1.0" encoding="utf-8"?>
4python
測試
zope
複製**
ok ,從結構上,它很像我們常見的html超文字標記語言。但他們被設計的目的是不同的,超文字標記語言被設計用來顯示資料,其焦點是資料的外觀。它被設計用來傳輸和儲存資料,其焦點是資料的內容。
那麼它有如下特徵:
首先,它是有標籤對組成,
標籤可以有屬性:
標籤對可以嵌入資料:abc
標籤可以嵌入子標籤(具有層級關係):
獲得標籤屬性
那麼,下面來介紹如何用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'
nodetypes - 有名常數
獲得子標籤
現在要獲得catalog的子標籤以的標籤name
複製**
<?xml version="1.0" encoding="utf-8"?>
4python
測試
zope
複製**
對於知道元素名字的子元素,可以使用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"?>
4python
測試
zope
複製**
和標籤不止乙個如何區分?
複製**
#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"?>
4python
測試
zope
複製**
和標籤是有屬性的,如何獲得他們的屬性?
複製**
#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"?>
4python
測試
zope
複製**
標籤對之間是有資料的,如何獲得這些資料?
獲得標籤對之間的資料有多種方法,
方法一複製**
#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)
其實,方法二的作用不在於此,它核心功能是可以遍歷某一級標籤下的所有子標籤。
python讀取xml檔案
乙個 dom 的解析器在解析乙個 xml 文件時,一次性讀取整個文件,把文件中所有元素儲存在記憶體中的乙個樹結構裡,之後你可以利用dom 提供的不同的函式來讀取或修改文件的內容和結構,也可以把修改過的內容寫入xml檔案。python中用xml.dom.minidom來解析xml檔案,例項如下 def...
python讀取xml檔案
python3.2 讀寫 xml xml.etree.elementtree,xml.dom xml檔案例子如下,將其複製並儲存為檔名為test.xml 業務場景為讀取每個班級 id表示 的學生資訊 姓名,年齡 xml.etree.elementtree模組實現了乙個簡單而高效的api用於解析和建立...
python讀取xml檔案
什麼是xml?xml即可擴充套件標記語言,它可以用來標記資料 定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。abc.xml 4python 測試 zope ok 從結構上,它很像我們常見的html超文字標記語言。但他們被設計的目的是不同的,超文字標記語言被設計用來顯示資料,其焦點是...