python中的XML解析

 

 ElementTree的就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

 

 

[纯] 查看纯文本 
 
  1. <根>    
  2.  <personage =“18”>    
  3.     <名称> HZJ </名称>    
  4.     <性别>人</性别>    
  5.  </人>    
  6.  <personage =“19”des =“hello”>    
  7.     <名称>基基</名称>    
  8.     <性别>女性</性别>    
  9.  </人>    
  10. </根>  

 

1.加载XML文件

    加载XML文件共有2种方法,一是加载指定字符串,二是加载指定文件

 

2.获取元件的方法

  a)通过getiterator

  b)过孩子

  c)找到方法

  d)找到方法

 

[python] 查看纯文本 
 
  1. <span style = “font-size:13px;” # - * - 编码:utf-8 - * -  
  2.  xml.etree  导入 ElementTree  
  3. def  print_node(节点):  
  4.     '' '''打印结点基本信息'''  
  5.     打印“==============================================”   
  6.     打印“node.attrib:%s”  %node.attrib   
  7.     如果 node.attrib.has_key(“age” )>   :  
  8.         打印“node.attrib ['age']:%s”  %node.attrib [ 'age' ]   
  9.     打印“node.tag:%s”  %node.tag   
  10.     打印“node.text:%s”  %node.text   
  11. def  read_xml(文本):  
  12.     '' '''读取xml文件'''  
  13.     #加载XML文件(2种方法,一是加载指定字符串,二是加载指定文件)      
  14.     #root = ElementTree.parse(r“D:/test.xml”)  
  15.     root = ElementTree.fromstring(文本)  
  16.       
  17.     #获取元素的方法  
  18.     #1通过getiterator   
  19.     lst_node = root.getiterator(“person” )  
  20.      节点   lst_node:  
  21.         print_node(节点)  
  22.           
  23.     #2通过getchildren  
  24.     lst_node_child = lst_node [ ] .getchildren()[ ]  
  25.     print_node(lst_node_child)  
  26.           
  27.     #3。找到方法  
  28.     node_find = root.find('person' )  
  29.     print_node(node_find)  
  30.       
  31.     #4。的findall方法  
  32.     node_findall = root.findall(“person / name” )[ ]  
  33.     print_node(node_findall)  
  34.       
  35. 如果 __name__ == __main__  :  
  36.      read_xml(open(“test.xml” ).read())  
  37.  </跨度>  
[python] 查看纯文本 
 
  1. <span style = “font-size:13px;” # - * - 编码:utf-8 - * -  
  2.  xml.etree  导入 ElementTree  
  3. def  print_node(节点):  
  4.     '' '''打印结点基本信息'''  
  5.     打印“==============================================”   
  6.     打印“node.attrib:%s”  %node.attrib   
  7.     如果 node.attrib.has_key(“age” )>   :  
  8.         打印“node.attrib ['age']:%s”  %node.attrib [ 'age' ]   
  9.     打印“node.tag:%s”  %node.tag   
  10.     打印“node.text:%s”  %node.text   
  11. def  read_xml(文本):  
  12.     '' '''读取xml文件'''  
  13.     #加载XML文件(2种方法,一是加载指定字符串,二是加载指定文件)      
  14.     #root = ElementTree.parse(r“D:/test.xml”)  
  15.     root = ElementTree.fromstring(文本)  
  16.       
  17.     #获取元素的方法  
  18.     #1通过getiterator   
  19.     lst_node = root.getiterator(“person” )  
  20.      节点   lst_node:  
  21.         print_node(节点)  
  22.           
  23.     #2通过getchildren  
  24.     lst_node_child = lst_node [ ] .getchildren()[ ]  
  25.     print_node(lst_node_child)  
  26.           
  27.     #3。找到方法  
  28.     node_find = root.find('person' )  
  29.     print_node(node_find)  
  30.       
  31.     #4。的findall方法  
  32.     node_findall = root.findall(“person / name” )[ ]  
  33.     print_node(node_findall)  
  34.       
  35. 如果 __name__ == __main__  :  
  36.      read_xml(open(“test.xml” ).read())  
  37.  </跨度>  

 

 

想想为什么?不明白,请看下面

 

[python] 查看纯文本 
 
  1. #编码= UTF-8  
  2.  xml.etree  导入 ElementTree作为ET  
  3. #要找出所有人的年龄  
  4. per = ET.parse('test.xml' )  
  5. p = per.findall('/ person' )  
  6. for  x  in  p:  
  7.     打印 x.attrib  
  8. 打印  
  9. for  oneper  in  p:   #找出person节点  
  10.     对于 孩子   oneper.getchildren(): 找出人节点的子节点  
  11.         打印 child.tag,':' ,child.text  
  12.   
  13.     打印'年龄:' ,oneper.get('时代' )   
  14.     打印'############'   
[python] 查看纯文本 
 
  1. #编码= UTF-8  
  2.  xml.etree  导入 ElementTree作为ET  
  3. #要找出所有人的年龄  
  4. per = ET.parse('test.xml' )  
  5. p = per.findall('/ person' )  
  6. for  x  in  p:  
  7.     打印 x.attrib  
  8. 打印  
  9. for  oneper  in  p:   #找出person节点  
  10.     对于 孩子   oneper.getchildren(): 找出人节点的子节点  
  11.         打印 child.tag,':' ,child.text  
  12.   
  13.     打印'年龄:' ,oneper.get('时代' )   
  14.     打印'############'   

 


结果如下:

[python] 查看纯文本 
 
    1. 'age' :  '18' }  
    2. 'age' :  '19' ,  'des' :  'hello' }  
    3.   
    4. 名称:hzj  
    5. 性别:男人  
    6. 年龄:  18岁  
    7. ############  
    8. 名称:kiki  
    9. 性别:女性  
    10. 年龄:19岁   
    11. ############  
posted @ 2018-03-11 18:17  疾风知劲草岁寒见后调  阅读(203)  评论(0)    收藏  举报