导入ElementTree模块

import xml.etree.ElementTree as ET

为了创建一个element实例,使用Element 构造函数或者SubElement()工厂函数。
  ET.Element():通常用于创建根节点
  ET.SubElement(): 用于创建子节点

ElementTree 类可以用来包裹一个element结构,用于与XML进行相互转换。

通常使用:
  ElementTree 遍历整个文档。
  Element遍历单独的节点或者子节点通常使用 。

Element:方法以及函数
tag = None
attrib = None
text = None
tail = None
def append(self, subelement):
def extend(self, elements):
def insert(self, index, subelement):
def remove(self, subelement):
def getchildren(self):
def find(self, path, namespaces=None):
def findtext(self, path, default=None, namespaces=None):
def findall(self, path, namespaces=None):
def iterfind(self, path, namespaces=None):
def clear(self):
def get(self, key, default=None):
def set(self, key, value):
def keys(self):
def items(self):
def iter(self, tag=None):
def itertext(self):
ElementTree:常用函数
def getroot(self):
def parse(self, source, parser=None): #打开xml文件
def iter(self, tag=None):
def getiterator(self, tag=None):
def find(self, path, namespaces=None):
def findtext(self, path, default=None, namespaces=None):
def findall(self, path, namespaces=None):
def iterfind(self, path, namespaces=None):
def write(self, file_or_filename,
encoding=None,
xml_declaration=None,
default_namespace=None,
method=None, *,
short_empty_elements=True):

一、解析(获取到根节点[Element])
1、str方式:
  node = ET.XML(str_xml) = ET.fromstring(str_xml) #获取到根节点 (Element)
  #XML()=fromstring()
2、文件方式:
  result = ET.parse("file.xml") # 打开文件,(ElementTree)
  root = result.getroot() # 获取到根节点,(Element)

二、修改(使用[Element]型对象)
  tag、attrib、text、find、iter、remove、set......

三、重新写入文件

写入必须使用ElementTree对象调用write方法操作。
  1、str解析方式写入文件

    node = ET.XML(str_xml) #获取到根节点
    ...操作
    et = ET.ElementTree(root) #创建一个tree
    et.write("file.xml", encoding="utf-8", xml_declaration=True) #写入文件

  2、文件方式写回文件

  result = ET.parse("file.xml") #获取Tree
  root = result.getroot() #获取到根节点
  ...修改
  result.write("file.xml", encoding="utf-8", xml_declaration=True) 写回文件

四、创建XMl文件

  Element #创建根节点
  SubElement # 创建子节点
  ElementTree # 创建tree,用于写入文件

五、缩进

导入minidom模块
  from xml.dom import minidom
在写入文件是不在使用tree,使用下面的代码(其中的root是Element跟节点)

  c = minidom.parseString(ET.tostring(root, encoding="Utf-8")).toprettyxml(indent="\t")
  f = open("file.xml", "w", encoding="utf-8")
  f.write(c)
  f.close()

对以上的操作可以定义一个函数使用:

  def wrap(root):
    a = ET.tostring(root, encoding="Utf-8")
    b = minidom.parseString(a)
    c = b.toprettyxml(indent="\t")
    return c

六、命名空间

  1、注册命名空间:

    ET.register_namespace("com", "http://www.ehaomiao.com")

  2、调用(在需要使用命名空间的标签前加入,格式为{})如下:

    School = ET.Element("{http://www.ehaomiao.com}school")
    University = ET.SubElement(School, "{http://www.ehaomiao.com}University", attrib={"time": "4"})

  3、结果
    根节点的显示如下:(多了一句xmlns:com="http://www.ehaomiao.com"这样的语句)
      <com:school xmlns:com="http://www.ehaomiao.com">
    在每个调用命名空间的节点显示如下:(多了一个com:的标志)
      <com:University time="4">

七、重要

在操作过程中如遇到有关于对象类型的问题,可以使用type()方法查看一下。

八、创建XML文件练习

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/12/1 0001 14:07
# @Author : ming
import xml.etree.ElementTree as ET
from xml.dom import minidom ET.register_namespace("com", "http://www.ehaomiao.com") # 注册命名空间 School = ET.Element("{http://www.ehaomiao.com}school") # 调用命名空间
University = ET.SubElement(School, "{http://www.ehaomiao.com}University", attrib={"time": "4"})
d1 = ET.SubElement(University, "d1") # University是其父亲节点
d1.text = "大一"
d2 = ET.SubElement(University, "d2")
d2.text = "大二"
d3 = ET.SubElement(University, "d3")
d3.text = "大三"
d4 = ET.SubElement(University, "d4")
d4.text = "大四" High_school = ET.SubElement(School, "{http://www.ehaomiao.com}High_school", attrib={"time": "3"})
g1 = ET.SubElement(High_school, "g1")
g1.text = "高一"
g2 = ET.SubElement(High_school, "g2")
g2.text = "高二"
g3 = ET.SubElement(High_school, "g3")
g3.text = "高三" middle_school = ET.SubElement(School, "{http://www.ehaomiao.com}middle_school", attrib={"time": "3"})
c1 = ET.SubElement(middle_school, "c1")
c1.text = "初一"
c2 = ET.SubElement(middle_school, "c2")
c2.text = "初一"
c3 = ET.SubElement(middle_school, "c3")
c3.text = "初一" # 写入文件无缩进,写入到file1.xml 文件中
et = ET.ElementTree(School)
et.write("file1.xml", encoding="utf=8", xml_declaration=True) def wrap(root):
"""
将XML文件的所有节点添加换行符
:param root: 根节点[Element类型]
:return: 返回添加了缩进的字符串
"""
a = ET.tostring(root, encoding="Utf-8")
b = minidom.parseString(a)
c = b.toprettyxml(indent="\t")
return c # 写入文件有缩进,写入到file2.xml 文件中
a = wrap(School)
f = open("file2.xml", "w", encoding="utf-8")
f.write(a)
f.close()
<?xml version="1.0" ?>
<com:school xmlns:com="http://www.ehaomiao.com">
<com:University time="4">
<d1>大一</d1>
<d2>大二</d2>
<d3>大三</d3>
<d4>大四</d4>
</com:University>
<com:High_school time="3">
<g1>高一</g1>
<g2>高二</g2>
<g3>高三</g3>
</com:High_school>
<com:middle_school time="3">
<c1>初一</c1>
<c2>初一</c2>
<c3>初一</c3>
</com:middle_school>
</com:school>

file2.xml

<?xml version='1.0' encoding='utf=8'?>
<com:school xmlns:com="http://www.ehaomiao.com"><com:University time="4"><d1>大一</d1><d2>大二</d2><d3>大三</d3><d4>大四</d4></com:University><com:High_school time="3"><g1>高一</g1><g2>高二</g2><g3>高三</g3></com:High_school><com:middle_school time="3"><c1>初一</c1><c2>初一</c2><c3>初一</c3></com:middle_school></com:school>

file1.xml

python XML梳理的更多相关文章

  1. Python XML解析(转载)

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  2. Python xml 模块

    Python xml 模块 TOC 什么是xml? xml和json的区别 xml现今的应用 xml的解析方式 xml.etree.ElementTree SAX(xml.parsers.expat) ...

  3. Python XML解析之ElementTree

    参考网址: http://www.runoob.com/python/python-xml.html https://docs.python.org/2/library/xml.etree.eleme ...

  4. python大法好——Python XML解析

    Python XML解析 什么是XML? XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识. 它也是元标记语言,即定义了用于定义其他与 ...

  5. Android tween 动画 XML 梳理

    前言: Tween动画是展现出旋转.渐变.移动.缩放的这么一种转换过程,即补间动画.Tween动画有两种定义方式:XML形式,编码形式.这次主要来梳理XML的方式配置动画 (1)XML定义动画,按照动 ...

  6. 【Python】Python XML 读写

    class ACTIVE_FILE_PROTECT_RULE_VIEW(APIView): renderer_classes = (JSONRenderer, BrowsableAPIRenderer ...

  7. python xml.etree ElementTree解析 编辑 xml

    python有很多种xml解析方式,不过感觉etree的ElementTree 用起来最方便. #coding=utf-8 from xml.etree import ElementTree impo ...

  8. python - XML文件及其操作

    xml文件也是实现不同语言或者程序之间进行数据交换的协议,它的特点是尖括号开头,尖括号结尾.使用范围就更为广泛了,tomcat resin kvm 等等,使用了大量的xml文件来进行相关配置.先来看一 ...

  9. Python: xml转json

    1,引言 GooSeeker早在9年前就开始了Semantic Web领域的产品化,MS谋数台和DS打数机是其中两个产品.对web内容做结构化转换和语义处理的主要路线是 XML -> RDF - ...

随机推荐

  1. 腾讯云CVM服务器怎么建网站

    腾讯云云服务器CVM站在用户的角度看就相当于一台计算机,虽然实际上它是一个虚拟服务器,是一个大的云端服务器集群虚拟出来的一个虚拟服务器,在使用上直接当做一个实际的服务器即可.那么,对于一个新手菜鸟来说 ...

  2. linux 升级 5.0.2内核

    1.下载 wet https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.2.tar.xz -o /usr/src/ cd /usr/src ta ...

  3. 学习JAVA第一章的心得

    我抱着万分期待的心情开始了我第一天的JAVA学习课程,其实在第一开始的时候我对计算机行业便有很高地兴趣了.这主要归功于我真的从很小开始就就接触了电脑.进入学校以来,我就很期待老师会怎样教我们,会怎样带 ...

  4. springboot 设置 session 过期时间

    application.properties server.session.timeout=86400 #单位(s) 这里是24小时

  5. C#用Infragistics 导入导出Excel(一)

    最近项目中有数据的导入导出Excel的需求,这里做简单整理. 公司用的是Infragistics的产品,付费,不需要本地安装Office. 有需要的朋友可以下载 Infragistics.2013.2 ...

  6. tree的使用,显示行号,find命令应用

    第1章 linux启动过程 1.开机自检bios 2.mbr引导 3.GRUB 菜单:选择不同的内核 4.加载内核 5.运行init进程 6.读取/etc/inittab运行级别配置文件 7.执行 / ...

  7. ESLint 规则详解(二)

    接上篇 ESLint 规则详解(一) 前端界大神 Nicholas C. Zakas 在 2013 年开发的 ESLint,极大地方便了大家对 Javascript 代码进行代码规范检查.这个工具包含 ...

  8. centos 7 tomcat 开机自启

    第一章 1.将tomcat加入开启自己,以减少手动启动的麻烦 环境配置需要提前配置好.(我这里已经是不做操作了) 192.168.1.195 jdk1.8 +  tomcat 8 第二章 2.编写to ...

  9. 电梯V1.0

    电梯V1.0 GitHub仓库地址 Problem 一栋3层的大楼(楼层编号0-2),设有一台无限载重的电梯,初始时电梯停在0层.电梯移动1层的耗时为1,在某一层停靠的耗时为1(时间初始为0).电梯不 ...

  10. 剑指offer:数值的整数次方

    题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路: 一开始直接用一个for循环做连乘,测了一下,发现这个指数可能是负 ...