python讀取xml檔案

2021-08-10 14:56:41 字數 4546 閱讀 2702

什麼是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超文字標記語言。但他們被設計的目的是不同的,超文字標記語言被設計用來顯示資料,其焦點是...