<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
檢視全部包含“三種⽅法:
解析xml檔案並獲取根節點:
from xml.etree import ElementTree as ET # 1、開啟xml檔案 tree =ET.parse(r"E:Acctrue2.0TesttestDataN0530YPYM001.xml") # 獲xml檔案的內容取根標籤 root = tree.getroot() print(root)
注意xml格式的內容應該沒有xml格式宣告的內容“<?xml version="1.0" encoding="UTF-8"?>”,
如果有則會解析錯誤:
content = """ <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="關聯關係XML Schema-3.0.xsd" License=""> <Events version="3.0"> <Event name="RelationCreate"> <Relation productCode="06970593810109" subTypeNo="06970593810109" cascade="1" packageSpec="50人份/盒" comment="" linkProductCode="" assCorpCode=""> <Batch batchNo="N0530001" madeDate="2022-05-30" validateDate="2023-05-29" workshop="無" lineName="無" lineManager="無"> <Code curCode="010697059381010910N053000117230527" packLayer="1" parentCode="" flag="0" /> </Batch> </Relation> </Event> </Events> </Document> """ root2= ET.XML(content) print(root2)
獲取標籤名,獲取標籤屬性及獲取標籤文字:
# 1、開啟xml檔案 tree =ET.parse(r"E:Acctrue2.0TesttestDataN0530YPYM001.xml") # 獲xml檔案的內容取根標籤 root = tree.getroot() # 2、讀取節點內容 # 2.1 獲取根標籤下的子標籤 for child in root: 獲取根節點下的子標籤 print(child.tag) # *.tag 是獲取標籤名字(字串型別) print( child.attrib) # *.attrib是獲取標籤屬性(字典型別) for node in child: 獲取跟標籤下子標籤的子標籤 print(node.tag) print(node.attrib) print(node.text) # *.text 獲取標籤文字
find() # 此種寫法只能獲取根標籤下的一級子標籤,即只能查詢下一級標籤,不能查詢到下一級的下一級標籤,且找到的是第一個相應的標籤
findall()此種寫法只能獲取根標籤下的一級子標籤,即只能查詢下一級標籤,不能查詢到下一級的下一級標籤 ,但是找到下一級的所有符合名稱的標籤
# 1、開啟xml檔案 from xml.etree import ElementTree as ET # 1、開啟xml檔案 from xml.etree import ElementTree as ET tree =ET.parse(r"E:Acctrue2.0TesttestDataN0530YPYM001.xml") # 獲xml檔案的內容取根標籤 root = tree.getroot() print(root) # 2.2 通過標籤名稱獲取標籤 find() events_object = root.find("Events") # 此種寫法只能獲取根標籤下的一級子標籤,即只能查詢下一級標籤,不能查詢到下一級的下一級標籤,**且找到的是第一個響應的標籤** print(events_object.tag, events_object.attrib) event_object = events_object.find("Event") # 進一步獲取跟標籤下子標籤的子標籤 print(event_object.tag,event_object.attrib) # 2.3 通過標籤名稱獲取標籤 findall() events_objects = root.findall("Events") # 此種寫法只能獲取根標籤下的一級子標籤,即只能查詢下一級標籤,不能查詢到下一級的下一級標籤,但是可以獲取下一級所有符合名稱的標籤 for event_clee in events_objects: print(event_clee.tag, event_clee.attrib) event_object = event_clee.findall("Event") # 進一步獲取跟標籤下子標籤的子標籤 for relation_cell in event_object: print(relation_cell.tag, relation_cell.attrib) # 2.4 findall(xpath) Events_object = root.findall('.//Code') Events_object1 = root.findall('.//Code[@curCode="010697059381010910N053000117230527"]') Events_object2 = root.findall('.//*[@curCode="010697059381010910N053000117230527"]') #注意 前面的「.」不能省略, print(Events_object) print(Events_object1) print(Events_object2[0])
from xml.etree import ElementTree as ET # 1、開啟xml檔案 tree =ET.parse(r"E:Acctrue2.0TesttestDataN0530YPYM001.xml") # 獲xml檔案的內容取根標籤 root = tree.getroot() print(root) # 2.2 根據標籤名全文搜尋標籤 Code_object = root.iter("Code") 全文搜尋標籤名為「Code」的標籤 print(Code_object) for code in Code_object: print(code.tag, code.attrib)
from xml.etree import ElementTree as ET tree =ET.parse(r"E:Acctrue2.0TesttestDataN0530YPYM001.xml") # 獲xml檔案的內容取根標籤 root = tree.getroot() relation_object = root.find("Events").find("Event").iter("Relation") # 獲取第一個Events的一級子標籤下的Relation子標籤 for relation_cell in relation_object: relation_cell.set("productCode", "產品編碼") # 如果有相應屬性,則修改屬性值,沒有則新增 relation_cell.set("productCode2", "產品編碼2") relation_cell.find("Batch").find("Code").text="追溯碼" # 注意:如果之前是短標籤,增加文字屬性後自動變為長標籤。 tree = ET.ElementTree(root) tree.write("new.xml", encoding="utf-8",short_empty_elements=True) # 如果檔案不存在,則建立檔案,如果檔案已存在則修改響應內容
from xml.etree import ElementTree as ET tree =ET.parse(r"E:Acctrue2.0TesttestDataN0530YPYM001.xml") # 獲xml檔案的內容取根標籤 root = tree.getroot() # ####################錯誤的刪除方式######################## # # 獲取響應標籤 # Event_object = root.find("Events").find("Event") # # 刪除相應標籤 # root.remove(Event_object) # 刪除只能刪除其子標籤,不能刪除其子標籤下的子標籤,因為relation_object是子標籤下的子標籤,因此此時刪除失敗 ################## 正確的刪除方式############################# Events_object = root.find("Events") Event_object = Events_object.find("Event") Events_object.remove(Event_object) tree = ET.ElementTree(root) tree.write("new.xml", encoding="utf-8") # 如果檔案不存在,則建立檔案,如果檔案已存在則修改響應內容
先建立各類標籤,再建立標籤之間關係:
from xml.etree import ElementTree as ET # 建立根標籤 root = ET.Element("root") # 建立一個標籤tagName1 tagName1 = ET.Element("tagName1", {"tag1Attribute":"AttributeValue1"}) # 建立一個標籤tagName2 tagName2 = ET.Element("tagName2", {"tag2Attribute":"AttributeValue2"}) # 建立一個標籤tagName11 tagName11 = ET.Element("tagName11", {"tag11Attribute":"AttributeValue11"}) # 建立一個標籤tagName12 tagName12 = ET.Element("tagName12", {"tag12Attribute":"AttributeValue12"}) # 將標籤tagName11和tagName12 新增的tagName1中作為tagName1的子標籤 tagName1.append(tagName11) tagName1.append(tagName12) # 將標籤tagName1和tagName2 新增的root中作為root的子標籤 root.append(tagName1) root.append(tagName2) # 儲存 tree = ET.ElementTree(root) tree.write("newCreate.xml", xml_declaration=True, encoding="utf-8",short_empty_elements=True) # xml_declaration是否包含宣告檔案, encoding編碼方式,short_empty_elements 規定是短標籤(單標籤)還是雙標籤
<?xml version='1.0' encoding='utf-8'?> <root> <tagName1 tag1Attribute="AttributeValue1"> <tagName11 tag11Attribute="AttributeValue11"/> <tagName12 tag12Attribute="AttributeValue12"/> </tagName1> <tagName2 tag2Attribute="AttributeValue2"/> </root>
from xml.etree import ElementTree as ET # 建立根節點 root = ET.Element("family") # 建立一級子標籤 son1 = root.makeelement("son", {"name":"son1"}) son2 = root.makeelement("son", {"name":"son2"}) # 建立二級子標籤 grandson1 = son1.makeelement("grandson1", {"name":"grandson1"}) grandson2 = son1.makeelement("grandson1", {"name":"grandson2"}) # 將二級子標籤與一級子標籤關聯 son1.append(grandson1) son1.append(grandson2) # 將一級子標籤與根標籤關聯 root.append(son2) root.append(son1) tree = ET.ElementTree(root) tree.write("../testData/neswfile.xml", xml_declaration=True, encoding="utf-8")
此種方式是在建立元素時直接建立相關關係:
from xml.etree import ElementTree as ET # 建立根節點 root = ET.Element("family") # 建立一級子標籤 son1 = ET.SubElement(root, "son", {"name":"son1"}) son2 = ET.SubElement(root,"son", {"name":"son2"}) # 建立二級子標籤 grandson1 = ET.SubElement(son1,"grandson1", {"name":"grandson1"}) grandson1.text="大孫子" grandson2 = ET.SubElement(son1,"grandson1", {"name":"grandson2"}) grandson2.text="小孫子" tree = ET.ElementTree(root) tree.write("../testData/neswfile.xml", xml_declaration=True, encoding="utf-8")
<?xml version='1.0' encoding='utf-8'?> <family> <son name="son1"> <grandson1 name="grandson1">大孫子</grandson1> <grandson1 name="grandson2">小孫子</grandson1> </son> <son name="son2"/> </family>
到此這篇關於python處理xml檔案操作詳解的文章就介紹到這了,更多相關python處理xml內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45