zoukankan      html  css  js  c++  java
  • xml模块

    xml模块

    xml是可扩展标记语言和HTML类似,用来传输和储存数据,python里面的处理XML数据的模块为xml.etree.ElementTree,ElementTree的意思是节点树,二Element带便一个单独的节点。

    xml数据由标签作为标记而标又有两种。

    自闭合标签(有头有尾):<age>2</age>

    非闭合标签(有头无尾):<husband age="5" name="Mary" />

    看一段下面的xml数据:

    <data>
        <animals name="Tom">
            <age>2</age>
            <b_year>2010</b_year>
            <weight>20</weight>
            <husband age="10" name="Alex" />
        </animals>
        <animals name="Bob">
            <age>3</age>
            <b_year>2012</b_year>
            <weight>15</weight>
            <husband age="5" name="Mary" />
        </animals>
        <animals name="Chirwy">
            <age>4</age>
            <b_year>2008</b_year>
            <weight>25</weight>
            <husband age="3" name="Ared" />
        </animals>
    
    </data>

    1.导入xml模块和解析xml文件

    1 import xml.etree.ElementTree as ET
    2 
    3 tree = ET.parse('XML_data')    #使用parse方法解析XML_data得到xlm数据树,把它赋值给tree得到一个对象,接下来直接操作此对象
    4 root = tree.getroot()    #得到根节点
    5 print(root)              #打印根节点的内存地址
    6 print(root.tag)          #tag方法打印根结点的标签名称

    2.查看其他节点及其名称

     1 import xml.etree.ElementTree as ET
     2 
     3 tree = ET.parse('XML_data')    #使用parse方法解析XML_data得到xlm数据树,把它赋值给tree得到一个对象,接下来直接操作此对象
     4 root = tree.getroot()    #得到根节点
     5 print(root)              #打印根节点的内存地址
     6 print(root.tag)          #tag属性打印根结点的标签名称
     7 
     8 for i in root:
     9     print("子节点",i.tag)
    10     for j in i:
    11         print("孙节点", j.tag)

    结果:

    子节点 animals
    孙节点 age
    孙节点 b_year
    孙节点 weight
    孙节点 husband
    子节点 animals
    孙节点 age
    孙节点 b_year
    孙节点 weight
    孙节点 husband
    子节点 animals
    孙节点 age
    孙节点 b_year
    孙节点 weight
    孙节点 husband

    3.获得标签里面的属性

    1 for m in root:
    2     print(m.attrib)
    {'name': 'Tom'}
    {'name': 'Bob'}
    {'name': 'Chirwy'}

    4.标签里面包含的文本内容

    1 for m in root:
    2     for n in m:
    3         print(n.text)
    2
    2010
    20
    None
    3
    2012
    15
    None
    4
    2008
    25
    None

    5.若想取到特定标签中的值,可以使用iter()方法

    1 for n in root.iter("b_year"):
    2     print(n.tag,n.text)
    b_year 2010
    b_year 2012
    b_year 2008

    6.修改xml数据

    set()方法可以给标签添加新的属性

    1 for n in root.iter("b_year"):
    2     new_year=int(n.text)+1
    3     n.text=str(new_year)#修改b_year标签的text属性
    4     n.set("updated1","yes")#给year这个标签增加一个属性
    5 tree.write("xml_data1.xml")#直接把修改的写入到文件中

    第五行中的文件名可以使用原来的文件名字相当于覆盖更新,他也可以使用其他的名称,相当于又创建了一个新的xml文件。

    7.删除标签使用remove()方法,使用方法和6一样

    8.通过模块创建xml文件

    1 import xml.etree.ElementTree as ET     #导入模块
    2 new_xml = ET.Element('Student')     #创建根节点
    3 name = ET.SubElement(new_xml, 'name', attrib={"GPA":'4.5'}) #创建子节点
    4 age = ET.SubElement(name, 'age',attrib={'isOK':'ok'})       #创建孙节点
    5 sex = ET.SubElement(name, 'sex')                #创建孙节点
    6 sex.text = '28'                                 #添加标签内容
    7 
    8 et = ET.ElementTree(new_xml)            #生成文件对象
    9 et.write('test.xml', encoding='utf-8',xml_declaration=True)     #生成对象

    结果:

    <?xml version='1.0' encoding='utf-8'?>
    <Student>
        <name GPA="4.5">
            <age isOK="ok" />
            <sex>28</sex>
        </name>
    </Student>
  • 相关阅读:
    不同等级数据源的多级缓冲环的生成
    从DataTable到List<Model>(C#.net)
    string与char之间的转换以及如何获得string所占位数
    AndroidKotlin
    Android高级POS开发
    IOS 应用开发
    Android切屏的处理
    Android POS开发
    Android深入理解JNI
    Android的IPC机制Binder
  • 原文地址:https://www.cnblogs.com/hexiaoqi/p/9378660.html
Copyright © 2011-2022 走看看