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

    1.XML模块

    • 什么是XML

      可拓展的标记语言

      标记翻译为标签,用标签来组织数据的语言

      XML 被设计用来传输和存储数据。

    • 相比json,XML使用场景更加广泛,但是语法格式相比json复杂得多

      • 什么时候用json:前后台交互数据时 使用json

      • 是么时候用xml:当需要自定义文档时 使用xml

       

      比如Java中经常用xml来作为配置文件

      作为配置文件,常用操作就是通过程序去读取配置信息

      而修改增加删除,一般是交给用户手动来完成

        • xml文档格式

          • 如下例子

          <person name="jack">hello i am a person</person>

          一个完整的标签分为三个部分

          标签名(tagname):   person

          属性(attribute):       name 值为jack

          文本(text):              hello i am a person

           

          其他格式要求:

          一、任何的起始标签都必须有一个结束标签。

          二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如。XML解析器会将其翻译成。

          三、标签必须按顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。

          四、所有的属性都必须有值。

          五、所有的特性都必须在值的周围加上双引号。

          六、最外层必须有且只能有一个标签,称为根标签

           

    2.使用XML模块解析

    准备数据

    <?xml version="1.0"?>
    <data>
        <country name="Liechtenstein">
            <rank updated="yes">2</rank>
            <year>2008</year>
            <gdppc>141100</gdppc>
            <neighbor name="Austria" direction="E"/>
            <neighbor name="Switzerland" direction="W"/>
        </country>
        <country name="Singapore">
            <rank updated="yes">5</rank>
            <year>2011</year>
            <gdppc>59900</gdppc>
            <neighbor name="Malaysia" direction="N"/>
        </country>
        <country name="Panama">
            <rank updated="yes">69</rank>
            <year>2011</year>
            <gdppc>13600</gdppc>
            <neighbor name="Costa Rica" direction="W"/>
            <neighbor name="Colombia" direction="E"/>
        </country>
    </data>

     

    解析XML

    import xml.etree.ElementTree as ET
     
    tree = ET.parse("xmltest.xml")
    root = tree.getroot()
    print(root.tag)
     
    #遍历xml文档
    for child in root:
        print('========>',child.tag,child.attrib,child.attrib['name'])
        for i in child:
            print(i.tag,i.attrib,i.text)
     
    #只遍历year 节点
    for node in root.iter('year'):
        print(node.tag,node.text)
    #---------------------------------------
    import xml.etree.ElementTree as ET
     
    tree = ET.parse("xmltest.xml")
    root = tree.getroot()
     
    #修改
    for node in root.iter('year'):
        new_year=int(node.text)+1
        node.text=str(new_year)
        node.set('updated','yes')
        node.set('version','1.0')
    tree.write('test.xml')
     
     
    #删除node
    for country in root.findall('country'):
       rank = int(country.find('rank').text)
       if rank > 50:
         root.remove(country)
     
    tree.write('output.xml')

     

    1.三个用于查找标签函数

    iter("标签名") #全文查找
    find("标签名") #查找子节点匹配的第一个
    findall("标签名") #查找字节点匹配的所有

     

    2.访问标签的内容

    element.tag 获取标签名
    element.attrib 获取属性
    element.text 获取文本

     

    3.修改文档内容

    elment.tag = "标签名"
    element.text = "文本"
    element.set("属性名","属性值")

     

    4.删除节点

    root.remove(标签对象)

     

    5.添加子标签

    #创建标签对象
    year2=ET.Element('year2') # 指定名称
    year2.text='新年' 
    year2.attrib={'update':'yes'}
    #添加
    country.append(year2) #往country节点下添加子节点

     

    删除添加修改后都需要调用write写入到文件

    tree.write("文件名"),#注意文档对象才能执行写入操作

     

    代码生成XML文档(了解)

    import xml.etree.ElementTree as ET
     new_xml = ET.Element("namelist")
    name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
    age = ET.SubElement(name,"age",attrib={"checked":"no"})
    sex = ET.SubElement(name,"sex")
    sex.text = 'man'
    name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
    age = ET.SubElement(name2,"age")
    age.text = '19'
    et = ET.ElementTree(new_xml) #生成文档对象
    et.write("test.xml", encoding="utf-8",xml_declaration=True)
     
    ET.dump(new_xml) #打印生成的格式

     

    总结,xml的解析比起json而言非常复杂 因为其扩展性远比json高,在java中常作为配置文件,当你在前后台进行数据交互时,优先 是用json格式

    疑惑:文本也可以作为属性,属性也可以作为文本,?到底如何选择?, XML不仅仅可以定义数据结构还可以定义数据的显示样式,想想HTML!

     

     

     

  • 相关阅读:
    快速排序算法
    冒泡排序
    正则表达式
    博客园 自定义 个性主题优化 这是我迄今为止用过的最好的模板 silence
    Python 中 如何复制图片?如何更改图片存储路径? 在遇无数坑后的最全解答 百试百灵
    作业test
    day69
    day68
    day67
    day67test
  • 原文地址:https://www.cnblogs.com/liusijun113/p/10104343.html
Copyright © 2011-2022 走看看