导入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. windows超级实用快键键

    1 电脑锁屏Win + L 有些时候,需要暂时离开座位去处理其他事,可是电脑还有数据再跑. 关掉的话,数据就白跑了,不关的话,又不想让别人看到我电脑的资料. 那么就按住windows键后,再按L键. ...

  2. Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理

    这篇文章我们来学习如何使用 Spring Boot 集成 Apache Shiro .安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在 Java 领域一般有 Spring S ...

  3. SSIS 更新变量

    在Package中声明一个variable,在package运行的过程中,SSIS如何update Variable? 第一种方法:使用 Script Task 来更新Variable的值 1,创建一 ...

  4. Js_checkbox的互斥

    function ck_click(obj) { var ck_20 = document.getElementById("ck_20"); var ck_25 = documen ...

  5. 转 git config命令使用

    . git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大家 ...

  6. Python能做什么?

    Python作为一个功能强大,并且简单易学的编程语言而广受好评,那么Python都能做些什么呢?概括起来有以下几个方面: 1.Web开发: 2.大数据处理: 3.人工智能: 4.自动化运维: 5.云计 ...

  7. PAT甲题题解-1058. A+B in Hogwarts (20)-大水题

    无语,这种水题还出,浪费时间,但又不得不A... #include <iostream> #include <cstdio> #include <algorithm> ...

  8. php OPcache

    众所周知php是一种解释型语言,它的执行可分为如下几个流程: Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens) Parsing, 将Tokens转换成简单而有意义的表达式 ...

  9. js分页实例

    js分页实例 案例1 1.js_pageusers.html <!DOCTYPE html> <html> <head> <title>js_pageu ...

  10. Struts2 调用非execute方法

    调用非execute方法 1)如果你的Action类是继承自ActionSupport的话,确切的说是重写了execute方法,ActionSupport里的默认实现就是返回"success ...