天天看點

python 使用 xml.etree.ElementTree 解析 xml

使用 xml.etree.ElementTree  (簡稱ET) 來解析 xml  非常好用推薦給大家。按照我自己的了解,使用ET 解析xml 就像 周遊 字典一樣 ,以如下資料為例

<?xml version="1.0" encoding="utf-8"?>
	<SMP2019-ECISA>
		<Doc ID="4">
			<Sentence ID="1" label="2">轉發了财新網的微網誌:【内鬼與大鳄姚剛張育軍的唏噓人生】(記者劉彩萍)近日,中國證券監督管理委員會原黨委委員、副主席姚剛和原黨委委員、主席助理張育軍被查。</Sentence>
			<Sentence ID="2">兩位進階幹部先後被雙開并移交司法引發資本市場無限唏噓,曾經的後備幹部、創新先鋒倒在了利益面前。</Sentence>
			<Sentence ID="3">内鬼與大鳄姚剛張育軍的唏噓人生??</Sentence>
			<Sentence ID="4">原圖?</Sentence>
			<Sentence ID="5">贊[21]?</Sentence>
			<Sentence ID="6">原文轉發[29]?</Sentence>
			<Sentence ID="7">原文評論[52]轉發理由:副主席,江湖上稱發審皇帝,IPO審批制的堅決擁護者。</Sentence>
			<Sentence ID="8">攀附山西王成,讓一大批樂視這種垃圾公司上市,權?</Sentence>
			<Sentence ID="9">貴牛的中樞。</Sentence>
			<Sentence ID="10">人民牛,還缺一個市場化IPO,還多一個發審委。</Sentence>
		</Doc>
</SMP2019-ECISA>
           

具體代碼如下

import xml.etree.ElementTree as ET

in_file = 'SMP2019_ECISA_Dev.xml'
tree = ET.parse(in_file)
# 獲得根節點 SMP2019-ECISA
root = tree.getroot()
# 周遊根節點
for doc in root:
    # attrib 獲得 doc 的屬性
    doc_attr = doc.attrib 
    print(doc_attr) # {'ID': '4'}
    # 周遊doc 中的子元素
    for sent in doc:
        sent_attr = sent.attrib
        print(sent_attr) # {'ID': '1', 'label': '2'}
        # 獲得正文
        text = sent.text
        print(text) #轉發了财新網的微網誌:【内鬼與大鳄姚剛張育軍的唏噓人生】...
           

解析過程 非常簡單,主要是三個點

  1. 直接使用 in 一層一層 周遊
  2. element.attrib 獲得 對應元素的屬性
  3. element.text 獲得正文