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

    """
    XML 全称  可扩展标记语言
    <tag></tag>  双标签
    <tag/> 单标签  没有文本 一般用于设计文档结构 例如换行等
    <tr/> 表示换行


    <tag style="color:red" age="18">12345</tag>
    一个标签的完整组成 有三个部分
    tag 是标签名称
    12345 是文本内容 text
    name = "jack" 是标签的属性

    其他的规范
    1.又开始就必须有结束
    2.所有属性值必须包含在双引号里面
    3.只能有一个根标签 (最外层只能有一个标签)
    4.开始标签和结束标签的顺序是相反的  最先打开谁 就最后关闭谁  最后打开的最先关闭
    文档声明可不写 主要是告诉浏览器 该怎么解析这个文件
    xml模块是自带的 不需要安装

    与json的区别
        xml 是一种可扩展的标记语言
        可以高度自定义文档的结构 数据类型 标签的含义等等
        所以扩展性远比JSON要强

        json更加适用于 前后台数据交换  优点 轻量级  跨平台 语法简洁
        xml更多用来作为配置文件 当然 python不太常用
        html就是一种xml

    """
    import xml.etree.ElementTree as ET

    # 打开一个文档 得到一个元素树(XML文档)
    tree = ET.parse("test1.xml")
    # 获取根标签
    root = tree.getroot()

    # 遍历出root标签的所有子标签
    # for tag in root:
    #     print(tag)

    # 遍历出文档中所有标签
    # for tag in root.iter():
    #     print(tag)


    # 从root下查找第一个名字为country的子标签
    # country = root.find("country")
    # print(country)

    # 从root下查找所有名字为country的子标签
    # countrys = root.findall("country")
    # print(countrys)


    # 从root下查找所有名字为country的子孙标签
    # for tag in  root.iter("country"):
    #     print(tag)


    """
    解析xml得到一个tree对象后 查找标签的4种方式

    1.iter()
        如果没有参数则查找所有标签
        如果有参数则查找所有名字匹配的标签
        查找范围 为全文
        
    2.find()
        必须给参数
        查找当前标签的子标签  返回第一个名字匹配的
        
    3.findall()
        必须给参数
        查找当前标签的子标签  返回所有名字匹配的

    4.直接遍历某个标签
        返回的是这个标签的所有子标签
        
        
    """





    import xml.etree.ElementTree as ET

    tree = ET.parse("test1.xml")
    root = tree.getroot()

    # 找到所有的country标签
    es = root.findall("country")
    # 获取某个标签的 标签名 属性 以及文本
    # for e in es:
    #     print(e.tag) # 标签名称
    #     print(e.attrib) # 标签的所有属性 返回一个字典
    #     print(e.text) # 标签的文本内容

    #获取所有国家的 邻居的名称
    # for c in es:
    #     print("%s的邻居如下:" % c.attrib.get("name"))
    #     for n in c.findall("neighbor"):
    #         print(n.attrib.get("name"))
    #     print("更新时间:%s" % c.find("year").text)
    #     print("===================================")








    import xml.etree.ElementTree as ET
    from xml.etree.ElementTree import Element
    # tree = ET.parse("test.xml")
    # root = tree.getroot()
    # # 修改文本
    # root.text = "这是跟标签的文本"
    # # 修改属性 没有则添加 有则覆盖
    # root.set("name","jack")
    # # 修改标签名字
    # root.tag = "data"
    #
    # tree.write("test2.xml",encoding="utf-8",xml_declaration=True)





    # 把test1.xml 中所有year标签的text加1
    # tree = ET.parse("test1.xml")
    # root = tree.getroot()
    # for e in root.iter("year"):
    #     e.text = str(int(e.text) + 1)
    #
    #
    # tree.write("test1.xml")


    #
    # 把test1.xml 中所有gdppc删除
    # remove 函数 需要一个标签作为参数 即要被删除的标签   然后只能有父标签来删除子标签
    # tree = ET.parse("test1.xml")
    # root = tree.getroot()
    #
    # for c in root.iter("country"):
    #     gdppc = c.find("gdppc")
    #     if gdppc != None:
    #         c.remove(gdppc)
    #
    # tree.write("test4.xml")


    # 添加标签

    tree = ET.parse("test1.xml")
    root = tree.getroot() # type:Element
    # 创建需要被添加的子标签
    new_tag = Element("ThisIsNewTag")
    new_tag.text = "123" # 设置文本
    root.append(new_tag) # 添加到root下
    tree.write("test5.xml") # 写入文件




    #
    import xml.etree.ElementTree as et

    # 创建标签
    tag = et.Element("data")
    tag.text = "123"
    tag.set("name","jack")

    # 创建一个元素树 并把tag添加到上面
    tree = et.ElementTree(tag)
    tree.write("test6.xml")


  • 相关阅读:
    496 服务器渲染 VS 客户端渲染
    495 队列,优先级队列
    493 JS中数据类型检测的四种方案
    492 js的继承:原型继承,CALL继承,寄生组合式继承,ES6中的类和继承
    491 CALL和APPLY以及BIND语法(含BIND的核心原理),CALL和APPLY的应用(类数组借用数组原型方法),CALL源码解析及阿里面试题
    490 JavaScript的this的五种指向
    488 DOM0和DOM2事件绑定的原理、使用、区别
    487 函数的三种角色:普通函数,构造函数(类),普通对象,原型链清明上河图
    486 原型及原型链模式:3个重要知识点,从面向对象角度来讲解内置类,hasOwnProperty,原型链方法中的THIS问题,基于内置类的原型扩展方法
    485 面向对象:单例设计模式,工厂模式,什么是面向对象,构造函数,instanceof,构造函数中的局部变量以及new构造函数时不加括号
  • 原文地址:https://www.cnblogs.com/tingguoguoyo/p/10896539.html
Copyright © 2011-2022 走看看