關于python讀取xml文章很多,但大多文章都是貼一個xml檔案,然後再貼個處理檔案的代碼。這樣并不利于初學者的學習,希望這篇文章可以更通俗易懂的教如何使用python 來讀取xml 檔案。
什麼是xml?
xml即可擴充标記語言,它可以用來标記資料、定義資料類型,是一種允許使用者對自己的标記語言進行定義的源語言。
abc.xml
那麼它有如下特征:
首先,它是有标簽對組成,<aa></aa>
标簽可以有屬性:<aa id=’123’></aa>
标簽對可以嵌入資料:<aa>abc</aa>
标簽可以嵌入子标簽(具有層級關系):
<aa>
<bb></bb>
</aa>
獲得标簽屬性
那麼,下面來介紹如何用python來讀取這種類型的檔案。
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 - 有名常數
<a href="http://www.w3school.com.cn/xmldom/dom_nodetype.asp">http://www.w3school.com.cn/xmldom/dom_nodetype.asp</a>
獲得子标簽
現在要獲得catalog的子标簽以的标簽name
對于知道元素名字的子元素,可以使用getelementsbytagname方法擷取:
如何區分相同标簽名字的标簽:
<caption>和<item>标簽不止一個如何區分?
root.getelementsbytagname('caption') 獲得的是标簽為caption 一組标簽,b[0]表示一組标簽中的第一個;b[2] ,表示這一組标簽中的第三個。
獲得标簽屬性值
<login>和<item>标簽是有屬性的,如何獲得他們的屬性?
getattribute方法可以獲得元素的屬性所對應的值。
獲得标簽對之間的資料
<caption>标簽對之間是有資料的,如何獲得這些資料?
獲得标簽對之間的資料有多種方法,
方法一
firstchild 屬性傳回被選節點的第一個子節點,.data表示擷取該節點人資料。
方法二
方法二有點複雜,所引用子產品也與前面的不一樣,findall用于指定在哪一級标簽下開始周遊。
getchildren方法按照文檔順序傳回所有子标簽。并輸出标簽名(child.tag)和标簽的資料(child.text)
其實,方法二的作用不在于此,它核心功能是可以周遊某一級标簽下的所有子标簽。