1. 程式人生 > >python模組之xml

python模組之xml

xml模組

  1. xml結構

xml是種實現不同語言或程式之間進行資料交換的協議,跟json差不多,但沒json使用簡單。但是因為歷史遺留問題,至今很多行業依然使用xml這種資料格式。

xml的格式如下,是通過<>節點來區別資料結構的。

<?xml version="1.0" encoding="utf-8"?>
<friendsinfo>
     <frd age="22" name="任盼晨">
         <info qq="1114893928" wechat="Dmgwood" />
    </frd>

    <frd age="22" name="袁靖">
         <info qq="2410152779" wechat="wxid_2vykc0sjoiie21" />
    </frd>

    <frd age="22" name="衛一帆">
         <info qq="97280940" wechat="oOC" />
    </frd>

    <frd age="22" name="胡文濤">
         <info qq="2522864970" wechat="hu2522864970" />
    </frd>

</friendsinfo>
  1. 語法結構
  • 任何的起始標籤都必須有一個結束標籤。 <> </>
  • 可以採用另一種簡化語法,可以在一個標籤中同時表示起始和結束標籤。這種語法是在大於號之前緊跟一個斜槓(/),例如,解析器會將其翻譯成
  • 標籤必須按合適的順序進行巢狀,所以結束標籤必須按映象順序匹配起始標籤。這好比將起始和結束標籤看作是數學中的左右羅浩:在沒有關閉所有的內部括號之前,是不能關閉外面括號的。
  • 所有的特性都必須有值。
  • 所有的特性都必須在值得周圍加上雙引號。
  • 一個標籤的組成部分包括:標籤名、屬性名以及屬性值、還有文字內容(可以沒有)

雙標籤的寫法:

<tagename '屬性名稱'="屬性值">文字內容</tagname>

單標籤的寫法:

<tagename 屬性名稱="屬性值"/>

總結:xml也是一種中間格式,也屬於序列化方式之一,與json比較,同樣的資料json會更小,效率更高;xml需要根據文件結構手動解析,而json直接可以轉為python資料物件。

  1. xml模組用法
# d.xml
<?xml version="1.0" encoding="utf-8"?>
<studentinfo>
     <stu age="20" name="張三">
         <girlfriend age="19" name="張三的女朋友" />
    </stu>
    <stu age="20" name="李四">
         <girlfriend age="19" name="李四的女朋友" />
    </stu>


    <age num="1">
        <age num="2">
            <age num="3">

            </age>
        </age>
    </age>

    <age>

    </age>
</studentinfo>
import xml.etree.ElementTree as ElementTree
tree = ElementTree.parse('d.xml')
rootTree = tree.getroot()
# 三種獲取標籤的方式
# 1. 獲取所有人的年齡,iter用於在全文範圍獲取標籤
for item in rootTree.iter('age'):
    # 一個標籤三個組成部分
    print(item.tag) # 標籤名稱
    print(item.attrib) # 標籤的屬性
    print(item.text) # 文字內容
# 2. 從當前標籤的子標籤中找到一個名稱為age的標籤,如果有多個,找到的是第一個
print(rootTree.find('age').attrib)
# 3. 從當前標籤的子標籤中找到所有名稱為age的標籤
print(rootTree.findall('age'))
# 獲取單個屬性
stu = rootTree.find('stu')
print(stu.get("age"))
print(stu.get("name"))
# 刪除子標籤
rootTree.remove(stu)
# 新增子標籤
newTag = ElementTree.Element('這是新標籤', {'一個屬性': '值'})
rootTree.append(newTag)

# 寫入檔案
tree.write('f.xml', encoding='utf-8')