导入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. 洛咕 P3700 [CQOI2017]小Q的表格

    洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...

  2. Markdown 编辑器

    桌面编辑器 MarkdownPad Pro 版注册邮箱: Soar360@live.com 授权密钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGI ...

  3. node基础:文件系统-文件读取

    node的文件读取主要分为同步读取.异步读取,常用API有fs.readFile.fs.readFileSync.还有诸如更底层的fs.read,以及数据流(stream),后面再总结下咯~ 直接上简 ...

  4. centos7 源码部署LNMP

    一.环境 系统环境:centos 7.4 64位 Nginx:1.7.9 MySQL: 5.7.20 (二进制包) PHP:5.6.37 二.Ngin 安装 Nginx部署 yum install   ...

  5. docker-compose编排

    创建并启动容器 docker-compose up -d 备注: -d 后台启动并运行容器 前提是你在执行该命令的时候已经编写好了docker-compose.yml文件,在这个文件的当前目录执行上述 ...

  6. 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois Puget

    目录 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois Puget 正文 对我的启发 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois ...

  7. TimelineJS JSON 数据格式 - 译文 [原创]

    TimelineJS 是用于绘制时间轴的 Javascript 开源脚本,目前是 TimelineJS3 版.参阅 https://github.com/NUKnightLab/TimelineJS3 ...

  8. 【独家】K8S漏洞报告|近期bug fix解读&1.11主要bug fix汇总

    内容提要: 1. 高危漏洞CVE-2018-1002105深度解读 2. 11/19--12/11 bug fix汇总分析 3. 1.11重要bug fix解读 4. 1.9重要bug fix解读 在 ...

  9. Linux内核分析第十八章读书笔记

    第十八章 调试 调试工作艰难是内核级开发区别于用户级开发的一个显著特点. 18.1 准备开始 我们需要什么? 一个bug 一个藏匿bug的内核版本 思路:假定能够让bug重现 在用户级程序中,bug直 ...

  10. ns3的输入输出奥秘(一) LOGGING系统

    1.LOGGING系统 (1)在我们之前对C++的理解,输出好像就是cout,然而 以myfirst.cc为例子 在我们前面的编写的代码中并没有出现cout,那他是如何输出. 可以回忆一下 LogCo ...