python xml.etree.ElementTree模塊生成、解析xml


一,XML文件格式介紹

<tag attrib = > text </tag> tail
例:<APP_KEY channel = 'CSDN'> hello123456789 </APP_KEY>
- tag,即標簽,用於標識該元素表示哪種數據,即APP_KEY
- attrib,即屬性,用Dictionary形式保存,即{‘channel’ = ‘CSDN’}
- text,文本字符串,可以用來存儲一些數據,即hello123456789
- tail,尾字符串,並不是必須的。

二,示例

'''
在Python標准庫中,ElementTree有兩種實現方式:一種是純Python的實現xml.etree.ElementTree,另一種是速度更快一點的xml.etree.cElementTree。如果不確定環境中是否有cElementTree,可以使用如下的方式導入
但從Python 3.3開始,會默認使用cElementTree來加快速度,但是之前的版本最好使用如上的代碼,以提高代碼的兼容性。
'''
try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET


def makeXML():
    # 創建一個根節點,標簽名為Root
    root_element = ET.Element("Root")
    # 插入兩個子節點
    sub_element1 = ET.SubElement(root_element, "sub_elemtnt1")
    sub_element2 = ET.SubElement(root_element, "sub_elemtnt2")
    for i in range(5):
        # 設置tag 以及
        subb = ET.SubElement(sub_element1, f"name_{i}", tag=f"tag_{i}", attrib={
                             "name": f"value_{i}"})
        # 為標簽賦值
        subb.text = f"abc{i}"

        subb2 = ET.SubElement(sub_element2, f"name_{i}", tag=f"tag_{i}", attrib={
                              "name": f"value_{i}"})
        subb2.text = f"efg{i}"
    # 創建xml樹,並將根節點放入其中
    xml_tree = ET.ElementTree(root_element)
    # 將xml 寫入到文件中,參數1:xml文件生成的位置和名字,參數2:指定xml編碼,參數3:xml 宣言,
# 即:是否有 <?xml version='1.0' encoding='utf-8'?> (這個方法生成的xml文件使用文本打開格式是沒有縮進的)
xml_tree.write(r"C:\Users\v-yunhgu\Desktop\example.xml", encoding="utf-8", xml_declaration=True) # 第二種寫入文件的方法 (這個方法生成的xml文件使用文本打開格式是有縮進的) # ET模塊轉換root為bytes輸出 xml_string = ET.tostring(root_element) from xml.dom import minidom dom = minidom.parseString(xml_string) with open(r"C:\Users\v-yunhgu\Desktop\example2.xml", 'w', encoding='utf-8') as f: # indent為根節點縮進,newl每行數據句末符號,addindent為其他節點縮進 dom.writexml(f, indent='\t', newl='\n', addindent='\t', encoding='utf-8') def getXML(): xmlPath = r"C:\Users\v-yunhgu\Desktop\example2.xml" # 解析xml 文件 xml_tree = ET.parse(xmlPath) # 獲取根節點 root_element = xml_tree.getroot() print("根節點名字:", root_element.tag) # 遍歷根節點下的子節點 for sub in root_element: print("根節點下的字節點:", sub.tag) for s in sub: print(s.tag, s.attrib, s.text) if __name__ == "__main__": makeXML() getXML()

 結果:

example.xml

<?xml version='1.0' encoding='utf-8'?>
<Root><sub_elemtnt1><name_0 name="value_0" tag="tag_0">abc0</name_0><name_1 name="value_1" tag="tag_1">abc1</name_1><name_2 name="value_2" tag="tag_2">abc2</name_2><name_3 name="value_3" tag="tag_3">abc3</name_3><name_4 name="value_4" tag="tag_4">abc4</name_4></sub_elemtnt1><sub_elemtnt2><name_0 name="value_0" tag="tag_0">efg0</name_0><name_1 name="value_1" tag="tag_1">efg1</name_1><name_2 name="value_2" tag="tag_2">efg2</name_2><name_3 name="value_3" tag="tag_3">efg3</name_3><name_4 name="value_4" tag="tag_4">efg4</name_4></sub_elemtnt2></Root>

example2.xml

<?xml version="1.0" encoding="utf-8"?>
    <Root>
        <sub_elemtnt1>
            <name_0 name="value_0" tag="tag_0">abc0</name_0>
            <name_1 name="value_1" tag="tag_1">abc1</name_1>
            <name_2 name="value_2" tag="tag_2">abc2</name_2>
            <name_3 name="value_3" tag="tag_3">abc3</name_3>
            <name_4 name="value_4" tag="tag_4">abc4</name_4>
        </sub_elemtnt1>
        <sub_elemtnt2>
            <name_0 name="value_0" tag="tag_0">efg0</name_0>
            <name_1 name="value_1" tag="tag_1">efg1</name_1>
            <name_2 name="value_2" tag="tag_2">efg2</name_2>
            <name_3 name="value_3" tag="tag_3">efg3</name_3>
            <name_4 name="value_4" tag="tag_4">efg4</name_4>
        </sub_elemtnt2>
    </Root>
根節點名字: Root
根節點下的字節點: sub_elemtnt1
name_0 {'name': 'value_0', 'tag': 'tag_0'} abc0
name_1 {'name': 'value_1', 'tag': 'tag_1'} abc1
name_2 {'name': 'value_2', 'tag': 'tag_2'} abc2
name_3 {'name': 'value_3', 'tag': 'tag_3'} abc3
name_4 {'name': 'value_4', 'tag': 'tag_4'} abc4
根節點下的字節點: sub_elemtnt2
name_0 {'name': 'value_0', 'tag': 'tag_0'} efg0
name_1 {'name': 'value_1', 'tag': 'tag_1'} efg1
name_2 {'name': 'value_2', 'tag': 'tag_2'} efg2
name_3 {'name': 'value_3', 'tag': 'tag_3'} efg3
name_4 {'name': 'value_4', 'tag': 'tag_4'} efg4

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM