zoukankan      html  css  js  c++  java
  • xml处理

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

    python有三种方法解析XML,SAX,DOM,以及ElementTree

    ###1.SAX (simple API for XML )
           pyhton 标准库包含SAX解析器,SAX是一种典型的极为快速的工具,在解析XML时,不会占用大量内存。
    但是这是基于回调机制的,因此在某些数据中,它会调用某些方法进行传递。这意味着必须为数据指定句柄,
    以维持自己的状态,这是非常困难的。

    修改、删除、增加

    #修改数据
    for node in root.iter('year'):
        new_year = int(node.text) + 1
        node.text = str(new_year)
        node.set("updated","yes")
    tree2.write("test.xml")
    
    
    #删除数据
    for country in root.findall('country'):
       rank = int(country.find('rank').text)
       if rank > 50:
         root.remove(country)
    
    tree2.write('output.xml')


    ###2.DOM(Document Object Model)
           与SAX比较,DOM典型的缺点是比较慢,消耗更多的内存,因为DOM会将整个XML数读入内存中,并为树
    中的第一个节点建立一个对象。使用DOM的好处是你不需要对状态进行追踪,因为每一个节点都知道谁是它的
    父节点,谁是子节点。但是DOM用起来有些麻烦。


    ###3.ElementTree(元素树)
         ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少,这里主要
    介绍ElementTree。

    xml的格式如下,就是通过<>节点来区别数据结构的:

     1 #-*- coding:utf-8 -*-
     2 import xml.etree.ElementTree as ET
     3 
     4 str_obj="""
     5 <?xml version="1.0" ?>
     6 <data>
     7     <country name="Liechtenstein">
     8         <rank updated="yes">2</rank>
     9         <year>2008</year>
    10         <gdppc>141100</gdppc>
    11         <neighbor name="Austria" direction="E"/>
    12         <neighbor name="Switzerland" direction="W"/>
    13     </country>
    14     <country name="Singapore">
    15         <rank updated="yes">5</rank>
    16         <year>2011</year>
    17         <gdppc>59900</gdppc>
    18         <neighbor name="Malaysia" direction="N"/>
    19     </country>
    20     <country name="Panama">
    21         <rank updated="yes">69</rank>
    22         <year>2011</year>
    23         <gdppc>13600</gdppc>
    24         <neighbor name="Costa Rica" direction="W"/>
    25         <neighbor name="Colombia" direction="E"/>
    26     </country>
    27 </data>
    28 """
    29 
    30 
    31 
    32 
    33 
    34 
    35 #将字符串处理成xml格式,这种方式不需要getroot()
    36 tree = ET.fromstring(str_obj.strip())
    37 #直接读取xml文件
    38 tree2 = ET.parse("test.xml")
    39 
    40 #获取到根层
    41 root = tree2.getroot()
    42 print(root.tag)
    43 
    44  #遍历xml文档,attrib:<country name="Panama">name就是ountry的属性
    45 for child in root:
    46     print(child.tag, child.attrib)
    47     for i in child:
    48         print(i.tag,i.text)
    49 
    50 #只遍历year 节点
    51 for node in root.iter('year'):
    52     print(node.tag,node.text)
    53 
    54 
    55 #循环字符转成的xml
    56 for node in tree.iter('gdppc'):
    57     print(node.tag,node.text)
    View Code

    修改和删除

  • 相关阅读:
    linux分析工具之vmstat详解
    linux分析工具之top命令详解
    hadoop之yarn详解(命令篇)
    hadoop之yarn详解(基础架构篇)
    linux分析利刃之sar命令详解
    hadoop之mapreduce详解(优化篇)
    linux之find命令详解
    一个毫无用处的公众号封面生成器
    一个简单的计时器对比各种可迭代对象定义方式的速度区别
    python中的迭代器和生成器
  • 原文地址:https://www.cnblogs.com/menkeyi/p/7205236.html
Copyright © 2011-2022 走看看