xml.etree.ElementTree 文件中文翻譯; SVG向量圖;Python標準庫

Mactor發表於2024-07-25

更新中..

簡介

xml.etree.ElementTree 實現了一個簡潔有效的用於解析和新建XML資料的API。其也被簡稱為ET

棄用: xml.etree.cElementTree自Python==3.3已被棄用
警告:使用時需注意惡意構建的資料,請防範XML漏洞

概念

XML 是一種繼承性的分層資料格式,常用樹來表示。
ET有兩個類,ElementTree 和 Element.
通常將ElementTree對應整個XML,而Element則對應單個XML元素。

注: 本文一般將'element'翻譯為“元素”。

解析XML

假設如下虛構的資料被儲存在目錄 country_data.xml下。

<?xml version="1.0"?>
<data>
    <country name="列支敦斯登">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="奧地利" direction="E"/>
        <neighbor name="瑞士" direction="W"/>
    </country>
    <country name="新加坡">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="馬來西亞" direction="N"/>
    </country>
    <country name="巴拿馬">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="哥斯大黎加" direction="W"/>
        <neighbor name="哥倫比亞" direction="E"/>
    </country>
</data>

將該XML使用ET解析的方法有兩種,從檔案直接匯入和從字串解析。

a. 從檔案匯入

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()

tree和root的型別
可以看到,tree與root分別是ElementTree和Element

b. 從字串匯入

假設該虛擬資料已被匯入計算機記憶體,儲存在名為data_str的字串變數中,則

import xml.etree.ElementTree as ET
root = ET.fromstring(data_str)

可以看到,由字串解析得到的直接就是Element物件

Element類

tag

字串,表示該Element的型別

text 與 tail

text

可以理解為該元素起始標籤之後跟隨的非標籤內容

tail

可以理解為該元素結束標籤之後跟隨的非標籤內容
例如

<a><b>1<c>2<d/>3</c></b>4</a>
元素 i <i> 後續內容 即text </i> 後續內容 即tail
a
b "1" "4"
c "2"
d "3"

attrib

字典,包含了該元素的屬性

attribStringExample = ' <neighbor name="奧地利" direction="E"/> '
ele1 = ET.fromstring(attribStringExample)
print(ele1.attrib)

輸出{'name': '奧地利', 'direction': 'E'}

get(key, default=None)

從attrib字典中根據key獲取值,若未找到則返回default指定的值

v = ele1.get(key, default=None)
# 相當於:
v = ele1.attrib[key] if key in ele1.attrib.keys() else default

items() 與 keys()

從atrrib字典獲取鍵值對、鍵

set(key, value)

設定元素屬性
相當於

ele1.attrib[key]=value

find(match, namespaces=None), findall(match, namespaces=None), findtext(match, default=None, namespaces=None)

分別為

  1. 查詢以當前元素為父元素(父節點)的所有子元素(子節點)中與match匹配的第一個子元素,match可以是tag名稱或者path
  2. 查詢出所有匹配的結果,其他同上
  3. 返回第一個匹配的子元素的text,其他同find()

相關文章