本文來自 :https://www.cnblogs.com/yang1333/articles/12609714.html#3177870913html
Copy<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country> </data>
Copy""" # 注意: 返回值都是對應的標籤節點對象. print(root.iter('year')) # 全文搜索 print(root.find('country')) # 在root的子節點找,只找一個 print(root.findall('country')) # 在root的子節點找,找全部(類始於subprocess中的找到全部sections) """ import xml.etree.ElementTree as ET # 這樣導入的好處就是xml和etree包中的功能都能直接使用. 同時三者能夠結合使用 # 打開文件, 讀出xml文件對象 tree = ET.parse('db.xml') # 如上xml模板存入db.xml文件中 print(tree) # <xml.etree.ElementTree.ElementTree object at 0x0000023703B24070> # 讀出頂級節點對象date root = tree.getroot() print(root) # <Element 'data' at 0x0000023703C7E720> # 查找三種方式 # 1. 全文搜索: root.iter('year') res = root.iter("year") print(res) # <_elementtree._element_iterator object at 0x0000023EE649DE50> for year in res: print(''.center(50, '-')) print(year.tag) # 獲取year節點對象的標籤名 print(year.attrib) # 獲取year節點對象的屬性. 以key:value對的形式輸出. key代指屬性名, value代指屬性值 print(year.text) # 獲取year節點對象中的文本內容. """ -------------------------------------------------- year {'update': 'no'} 2018 -------------------------------------------------- year {'update': 'no'} 2021 -------------------------------------------------- year {'update': 'no'} 2021 """ # 2. 在root的子節點找,只找一個: root.find('country') res = root.find('country') print(res.tag) # country print(res.attrib) # {'name': 'Liechtenstein'} print(res.text) # 文本內容爲空 # 遞歸查找country下的year. 並獲取其標籤名, 屬性, 文本內容 res = root.find('country').find('year') # 等同於接着上面的繼續, res.find('year') print(res) # <Element 'year' at 0x000002A64D5BD590> print(res.tag) # year print(res.attrib) # {'update': 'no'} print(res.text) # 2018 # 3. 在root的子節點找全部: root.findall("country") res = root.findall("country") print(res) # [<Element 'country' at 0x00000253D3A9E770>, <Element 'country' at 0x00000253D3ACD810>, <Element 'country' at 0x00000253D3ACDAE0>] for country in res: print(''.center(50, '-')) res = country.find('year') print(res.tag) print(res.attrib) print(res.text) ''' -------------------------------------------------- year {'update': 'no'} 2018 -------------------------------------------------- year {'update': 'no'} 2021 -------------------------------------------------- year {'update': 'no'} 2021 '''
Copy import xml.etree.ElementTree as ET tree = ET.parse('db.xml') root = tree.getroot() # 需求: 把"db.xml"文件中的country全部year標籤屬性名改成no, 標籤文本加10 for year in root.iter('year'): print(year) year.text = str(int(year.text) + 10) # 注意: "db.xml"使用year.text讀出, 默認是字符串, 咱們要使用int轉換成整型才能進行數字運算. year.attrib = {'update': 'no'} tree.write('db.xml') # 需求: 把"db.xml"文件中的country下全部gdppc標籤文本加10000 for gdppc in root.iter('gdppc'): print(gdppc) gdppc.text = str(int(gdppc.text) + 10000) tree.write('db.xml')
Copyimport xml.etree.ElementTree as ET tree = ET.parse('db.xml') root = tree.getroot() for country in root.iter('country'): year = country.find("year") if int(year.text) > 2010: # 1. 調用ET.Element()方法增長標籤, 屬性, 文本 flag = ET.Element('egon') # 2. 添加標籤 flag.attrib = {'DSB': 'yes'} # 3. 爲添加的flag標籤對象添加屬性 flag.text = '大帥逼1' # 4. 爲添加的flag標籤對象添加文本內容 country.append(flag) # 5. 把添加的flag標籤對象追加到country標籤中, 做爲country的子節點標籤對象.(往country節點下添加子節點) tree.write("db.xml")
Copyimport xml.etree.ElementTree as ET tree = ET.parse('db.xml') root = tree.getroot() # 需求: 在全部的country標籤節點對象下的rank若是它的文本內容大於50, 那麼就刪除這個country for country in root.findall('country'): rank = int(country.find('rank').text) if rank > 50: root.remove(country) tree.write('db.xml')
Copyimport xml.etree.ElementTree as ET new_xml = ET.Element("country") # 建立標籤country節點, 返回new_xml節點對象 name = ET.SubElement(new_xml, "name", attrib={"update": "yes"}) # 在new_xml節點對象下建立標籤名爲"name"的子節點對象, 並指定屬性 name.text = 'egon' # 爲"name"字節的點對象添加文本內容 age = ET.SubElement(new_xml, 'year', attrib={'update': 'no'}) age.text = '18' sex = ET.SubElement(new_xml, 'sex') sex.text = 'male' et = ET.ElementTree(new_xml) # 生成文檔對象 et.write('text.xml', encoding='utf-8', xml_declaration=True) # 建立文件, 將該文檔對象"et"寫入.