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

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    import xml

    import requests
    from xml.etree import ElementTree as et

    ## 1.以字符串方式读取xml文件
    page = open('blog.xml','r',encoding='utf-8').read()
    root = et.XML(page)
    print(root.tag)# 当前节点的标签名 tag
    for node in root:
    print(node.tag,node.attrib,node.find('year').text)

    #当前节点的属性 attrib
    #当前节点的内容 text

    ##2.以解析文件方式打开文件,可修改文件内容
    ## 对象都是由类创建的,方法都在类中
    ## tree---->1.由ElementTree类创建 ElementTree(xxx)
    ## 创建有两种方式:et.parse(文件路径),et.ElementTree(根节点)
    ## 2.getroot() 获取根节点
    ## 3.write() 将内存中的xml写入文件
    tree = et.parse('blog.xml')
    rot = tree.getroot()
    for nod in rot.iter('year'):
    new_year = int(nod.text)+1
    nod.text = str(new_year)
    # set(self, key, value):设置属性
    # get(self, key, default=None):获取当前节点的属性值
    nod.set('name','NF')
    # 删除属性
    del nod.attrib['name']

    print(dir(rot))# 查看本层节点下有哪些方法

    # append(self, subelement):为当前节点追加一个子节点
    # extend(self, elements):为当前节点扩展 n 个子节点
    # insert(self, index, subelement):在当前节点的子节点中插入某个节点,
    # 即:为当前节点创建子节点,然后插入指定位置
    # remove(self, subelement):在当前节点在子节点中删除某个节点
    # findall(self, path, namespaces=None):获取所有的子节点
    # iterfind(self, path, namespaces=None):
    # 获取所有指定的节点,并创建一个迭代器(可以被for循环)
    # clear(self):清空节点
    #

    tree.write('blog.xml')

    ##3.创建xml文件
    #创建节点有三种方式(节点都是Element对象类型):
    ##1)makeelement(self, tag, attrib):创建一个新节点
    ##2)Element(tag, attrib={}):创建一个节点
    ##3)SubElement(parent, tag, attrib={}, **extra)用来构造一个已经存在的节点的子节点

    #创建根节点
    fa = et.Element("father")

    #创建子节点
    s1 = et.Element('son',{'name':"长子"})
    s2 = fa.makeelement('son',{'name':'次子'})
    s3 = et.SubElement(fa,'son',attrib={'name':"三子"})

    #将子节点添加到父节点
    fa.append(s1)
    fa.append(s2)
    #prettify(elem):将节点转换成字符串,并添加缩进
    from xml.dom import minidom
    def prettify(root):
    rough = et.tostring(root,'utf-8')
    reparse = minidom.parseString(rough)
    return reparse.toprettyxml(indent=" ")
    new_str = prettify(fa)
    f = open("new_str.xml",'w',encoding='utf-8')
    f.write(new_str)
    f.close()

    ## 上述方法可以直接封装成一个方法
    def mywrite(root,file):
    rough = et.tostring(root, 'utf-8')
    reparse = minidom.parseString(rough)
    new_str = reparse.toprettyxml(indent=" ")
    f = open(file, 'w', encoding='utf-8')
    f.write(new_str)
    f.close()
    mywrite(fa,'writeXml.xml')
    #生成文档对象,写入文档
    ##xml_declaration 给xml文件开头加上注解
    # zp = et.ElementTree(fa)
    # zp.write("zp.xml",encoding='utf-8',xml_declaration=True)
  • 相关阅读:
    NTP服务安装
    Teambition 的使用
    搭建svn服务器和测试
    通过NTP协议进行时间同步
    转利用OpenSSL库对Socket传输进行安全加密(RSA+AES)
    转源码编译安装MySQL5.6.12详细过程
    CentOS 6.4安装ffmpeg2.4.2 支持h.265
    转:CentOS 6.4 64-bit编译安装ffmpeg
    Work 2013 博客园挂博客
    FLASH和EEPROM的最大区别
  • 原文地址:https://www.cnblogs.com/wuxinyan/p/8836766.html
Copyright © 2011-2022 走看看