1. 程式人生 > >xml.etree.ElementTree模塊

xml.etree.ElementTree模塊

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模塊