xml.etree.ElementTree模塊
阿新 • • 發佈:2019-03-13
version 重新 nco _id discover exp temp fault 安全
xml.etree.ElementTree模塊
Element類型是一種靈活的容器對象,用於在內存中存儲結構化數據。
xml.etree.ElementTree模塊在應對惡意結構數據時顯得並不安全。
每個element對象都具有以下屬性:
1. tag:string對象,表示數據代表的種類。
2. attrib:dictionary對象,表示附有的屬性。
3. text:string對象,表示element的內容。
4. tail:string對象,表示element閉合之後的尾跡。
5. 若幹子元素(child elements)。
XML文件內容:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <zabbix_export> 3 <version>3.2</version> 4 <date>2017-10-27T08:30:54Z</date> 5 <groups> 6 <group> 7 <name>JX-SERVER</name> 8 </group> 9 </groups> 10 <hosts> 11 <host> 12 <host>GYSERVER</host> 13 <name>GYSERVER</name> 14 <description/> 15 <proxy/> 16 <status>0</status> 17 <ipmi_authtype>-1</ipmi_authtype> 18 <ipmi_privilege>2</ipmi_privilege> 19 <ipmi_username/> 20 <ipmi_password/> 21 <tls_connect>1</tls_connect> 22 <tls_accept>1</tls_accept> 23 <tls_issuer/> 24 <tls_subject/> 25 <tls_psk_identity/> 26 <tls_psk/> 27 <templates> 28 <template> 29 <name>Template OS Windows</name> 30 </template> 31 </templates> 32 <groups> 33 <group> 34 <name>JX-SERVER</name> 35 </group> 36 </groups> 37 <interfaces> 38 <interface> 39 <default>1</default> 40 <type>1</type> 41 <useip>1</useip> 42 <ip>172.17.200.116</ip> 43 <dns/> 44 <port>10050</port> 45 <bulk>1</bulk> 46 <interface_ref>if1</interface_ref> 47 </interface> 48 </interfaces> 49 <applications/> 50 <items/> 51 <discovery_rules/> 52 <httptests/> 53 <macros/> 54 <inventory/> 55 </host> 56 </hosts> 57 </zabbix_export>
一、使用xml.etree.ElementTree模塊讀取XML
1 import xml.etree.ElementTree as ET 2 tree = ET.parse(‘test.xml‘) 3 root = tree.getroot() 4 print(root.tag)#根節點標簽 5 for child in root: 6 print(child.tag,child.attrib,child.text) #二級節點標簽、屬性、內容
輸出結果:
1 zabbix_export # 2 version {} 3.2 3 date {} 2017-10-27T08:30:54Z 4 groups {} 5 6 hosts {}
這是使用for函數查詢根節點下所有元素的方式,另外一種是使用iter(‘text‘)查詢特定的節點下所有的元素,來看下面這段代碼,查詢某個特定節點。
1 import xml.etree.ElementTree as ET 2 tree = ET.parse(‘test.xml‘) 3 root = tree.getroot() 4 for node in root.iter(‘host‘): #查詢host節點 5 for i in node: #查詢host節點子節點 6 print(i.tag,i.text)
輸出結果:
1 host GYSERVER 2 name GYSERVER 3 description None 4 proxy None 5 status 0 6 ipmi_authtype -1 7 ipmi_privilege 2 8 ipmi_username None 9 ipmi_password None 10 tls_connect 1 11 tls_accept 1 12 tls_issuer None 13 tls_subject None 14 tls_psk_identity None 15 tls_psk None 16 templates 17 # template下還有子節點,所以此行為空,以下同理 18 groups 19 20 interfaces 21 22 applications None 23 items None 24 discovery_rules None 25 httptests None 26 macros None 27 inventory None
上面這種查詢方式查找的是整個XML內符合所有條件的值。
二、使用xml.etree.ElementTree模塊修改XML
xml.etree.ElementTree模塊修改無法直接修改原值,通過采用重新賦值的方式修改。
1 import xml.etree.ElementTree as ET 2 tree = ET.parse(‘test.xml‘) 3 root = tree.getroot() 4 for node in root.findall(‘hosts‘): 5 print(node.tag,node.text) 6 temp_node = ‘hostsssss‘ 7 node.tag = temp_node 8 print(node.tag,node.text) 9 tree.write(‘test.xml‘) #保存
輸出結果:
1 hosts 2 3 hostsssss 4
三、使用xml.etree.ElementTree模塊創建XML
1 from xml.etree import ElementTree as ET 2 3 root = ET.Element(‘root‘,{‘age‘:‘18‘})#設置屬性age=18 4 5 son=ET.SubElement(root,‘root‘,{‘age‘:‘18‘}) 6 ET.SubElement(son,‘haha‘,{‘bb‘:‘fhfhf‘}) 7 8 tree = ET.ElementTree(root) 9 tree.write(‘aha.xml‘) #保存aha.xml文件
輸出結果:
1 <root age="18"><root age="18"><haha bb="fhfhf" /></root></root>
xml.etree.ElementTree模塊