zoukankan      html  css  js  c++  java
  • day⑥:xml模块

    什么是xml?
    xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
    首先,它是有元素对组成,<aa></aa>

    元素可以有属性:<aa id=’123’></aa>,id='123'是属性

    元素对可以嵌入数据:<aa>abc</aa> , abc是value

    元素可以嵌入子元素(具有层级关系):

    <aa>

    <bb></bb>

    </aa>




    python对XML的解析
    常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。
    python有三种方法解析XML,SAX,DOM,以及ElementTree:
    1.SAX (simple API for XML )
    pyhton 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
    2.DOM(Document Object Model)
    将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
    文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
    一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
    3.ElementTree(元素树)
    ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

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

    2.获取element的方法
    a) 通过getiterator
    b) 过 getchildren
    c) find方法
    d) findall方法



    ElementTree 操作xml例子:

    test.xml
    1. <?xml version="1.0"?>
    2. <yaobin>
    3. <country name="Liechtenstein">
    4. <rank updated="yes">2</rank>
    5. <year>2008</year>
    6. <gdppc>141100</gdppc>
    7. <neighbor name="Austria" direction="E"/>
    8. <neighbor name="Switzerland" direction="W"/>
    9. </country>
    10. <country name="Singapore">
    11. <rank updated="yes">5</rank>
    12. <year>2011</year>
    13. <gdppc>59900</gdppc>
    14. <neighbor name="Malaysia" direction="N"/>
    15. </country>
    16. <country name="Panama">
    17. <rank updated="yes">69</rank>
    18. <year>2012</year>
    19. <gdppc>13600</gdppc>
    20. <neighbor name="Costa Rica" direction="W"/>
    21. <neighbor name="Colombia" direction="E"/>
    22. </country>
    23. </yaobin>


    一.遍历:
    1. #!/usr/bin/env python
    2. #coding=utf-8
    3. import xml.etree.cElementTree as ET
    4. tree=ET.parse("test.xml")
    5. root=tree.getroot()
    6. print(root.tag)
    7. for child in root:
    8. print(child.tag,child.attrib)
    9. for i in child:
    10. print("---->",i.tag,i.text)
    11. for node in root.iter('year'):
    12. print(node.tag,node.text)


    二.修改和删除
    1. #!/usr/bin/env python
    2. #coding=utf-8
    3. import xml.etree.cElementTree as ET
    4. tree=ET.parse("test.xml")
    5. root=tree.getroot()
    6. print(root.tag)
    7. for node in root.iter('year'):
    8. new_year=int(node.text) +100
    9. node.text=str(new_year)
    10. node.set("new_attrib","attrib_value")
    11. tree.write("new_test.xml")
    12. for country in root.findall('country'):
    13. rank=int(country.find('rank').text)
    14. if rank >50:
    15. root.remove(country)
    16. tree.write("new_test2.xml")


    三.自己创建xml文档
    1. #!/usr/bin/env python
    2. #coding=utf-8
    3. import xml.etree.ElementTree as ET
    4. new_xml = ET.Element("namelist") #root
    5. name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
    6. age = ET.SubElement(name,"age",attrib={"checked":"no"})
    7. sex = ET.SubElement(name,"sex")
    8. age.text = '33'
    9. sex.text="boy"
    10. name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
    11. age = ET.SubElement(name2,"age")
    12. sex = ET.SubElement(name2,"sex")
    13. age.text = '19'
    14. sex.text='girl'
    15. et = ET.ElementTree(new_xml) #生成文档对象
    16. et.write("my_test.xml", encoding="utf-8",xml_declaration=True)
    17. ET.dump(new_xml) #打印生成的格式







  • 相关阅读:
    几句让自己保留的动力的格言
    repo 的几个使用理解
    (转)汇编中断大全
    (转) 汇编.section和.text解释
    find 命令一些小技巧;
    android 系统使用c语言获取系统属性
    新的起点
    PDBC详细介绍
    PDBC(连接数据库)
    Python——基础知识
  • 原文地址:https://www.cnblogs.com/binhy0428/p/5221244.html
Copyright © 2011-2022 走看看