zoukankan      html  css  js  c++  java
  • day5模块学习--XML模块

    XML文件处理

        XML文件处理,有好几种方式,这里介绍一下xml.etree.ElementTree as ET。

        注意:xml.etree.ElementTree模块在应对恶意结构数据时显得并不安全。

        每个element对象都具有以下属性:

        1. tag:string对象,表示数据代表的种类;

        2. attrib:dictionary对象,表示附有的属性;

        3. text:string对象,表示element的内容;

        4. tail:string对象,表示element闭合之后的尾迹

        5. 若干子元素(child elements)。

        <tag attrib1=1>text</tab>tail

          1     2       3         4

        创建元素的方法有Element或者SubElement(),前者称作元素的构建函数(constructor),用以构建任一独存的元素;后者称作元素的制造函数(factory function),用以制造某一元素的子元素。

        有了一串元素之后,使用ElementTree类来将其打包,把一串元素转换为xml文件或者XML文件中解析出来。

        若想加快速度,可以使用C语言编译的API xml.etree.cElementTree。

        在使用xml.etree.ElementTree时,一般都按如下导入:

        try:
        import xml.etree.ElementTree as ET
      except ImportError:
        import xml.etree.cElementTree as ET

        XML是中结构化数据形式,在ET中使用ElementTree代表整个XML文档,并视其为一棵树,Element代表这个文档树中的单个节点。

        ET对象具有多种方法从不同来源导入数据,如下:

    #从硬盘的xml文件读取数据
    try
    : import xml.etree.ElementTree as ET except ImportError: import xml.etree.cElementTree as ET tree = ET.parse("XML文件") #载入数据 root = tree.getroot() print(root) print(root.tag) #获取根节点

        #遍历xml文档

       

    try:
        import xml.etree.ElementTree as ET
    except ImportError:
        import xml.etree.cElementTree as ET
    
    tree = ET.parse("XML文件")     #载入数据
    root = tree.getroot()
    for child in root:             #遍历节点
        print(child.tag,child.attrib)
    输出如下:
    country {'name': 'Liechtenstein'}
    country {'name': 'Singapore'}
    country {'name': 'Panama'}

        #只遍历year 节点

       

    try:
        import xml.etree.ElementTree as ET
    except ImportError:
        import xml.etree.cElementTree as ET
    
    tree = ET.parse("XML文件")     #载入数据
    root = tree.getroot()
    for node in root.iter("year"):
        print(node.tag,node.text)
    输出如下:
    year 2008
    year 2011
    year 201

        修改和删除xml文档内容

       

    try:
        import xml.etree.cElementTree as ET
    except ImportError:
        import xml.etree.ElementTree as ET
    
    tree = ET.parse("XML文件")     #载入数据
    root = tree.getroot()
    #修改
    for node in root.iter("year"):
        new_year = int(node.text) + 1     #node.text()值,属性的值
        node.text = str(new_year)
        node.set("update","yes")
    
    tree.write("XML文件")     #修改文件之后,重新写入文件里面,不然修改文件是无效的
    
    
    #删除node
    for country in root.findall("country"):
        rank = int(country.find("rank").text)
        if rank > 50:
            root.remove(country)
    
    tree.write("output.xml")

        文件操作中,每次修改完成数据之后,要重新写会文件之中,不然修改文件是没有用的。要重新写会文件才有效果。

        Element中的遍历与查询

        Element.iter(tag=None):遍历该Element所有后代,也可以指定tag进行遍历寻找。

        try:
        import xml.etree.ElementTree as ET
      except ImportError:
        import xml.etree.cElementTree as ET
      tree = ET.parse("XML文件") #载入数据
      root = tree.getroot()
      for node in root.iter():
        print(node)

        Element.findall(path):查找当前元素下tag或path能够匹配的直系节点。

        Element.find(path):查找当前元素下tag或path能够匹配的首个直系节点。

        Element.text: 获取当前元素的text值。

        Element.get(key, default=None):获取元素指定key对应的属性值,如果没有该属性,则返回default值。

        ElementTree对象

    class xml.etree.ElementTree.ElementTree(element=None, file=None)
      element如果给定,则为新的ElementTree的根节点。
    
      _setroot(element):用给定的element替换当前的根节点。慎用。
      
      # 以下方法与Element类中同名方法近似,区别在于它们指定以根节点作为操作对象。
      find(match)
      findall(match)
      findtext(match, default=None)
      getroot():获取根节点.
      iter(tag=None)
      iterfind(match)
      parse(source, parser=None):装载xml对象,source可以为文件名或文件类型对象.
      write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None,method="xml")

        自己创建xml文档

       

    import xml.etree.ElementTree as ET       
     
     
    new_xml = ET.Element("namelist")                                     #根节点namelist
    name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})       #SubElement()子节点,new_xml的子节点
    age = ET.SubElement(name,"age",attrib={"checked":"no"})              #创建子节点,name下的age节点
    sex = ET.SubElement(name,"sex")
    age.text = '33'                                                      #写入值,age赋值
    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) #打印生成的格式 
  • 相关阅读:
    icmp隧道手工操作
    Volatility2.4以上版本及fmem使用指南
    服务器解析漏洞总结
    Docker搭建独立服务器
    shell--(二)变量、字符串、数组、注释
    shell--(一)运行示例
    mysql 批量更新,没有就插入
    go 系统监控 cpu、内存等指标
    监控
    maven安装配置 每次都百度,麻烦
  • 原文地址:https://www.cnblogs.com/gengcx/p/7226632.html
Copyright © 2011-2022 走看看