python XML梳理
导入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梳理的更多相关文章
- Python XML解析(转载)
Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...
- Python xml 模块
Python xml 模块 TOC 什么是xml? xml和json的区别 xml现今的应用 xml的解析方式 xml.etree.ElementTree SAX(xml.parsers.expat) ...
- Python XML解析之ElementTree
参考网址: http://www.runoob.com/python/python-xml.html https://docs.python.org/2/library/xml.etree.eleme ...
- python大法好——Python XML解析
Python XML解析 什么是XML? XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识. 它也是元标记语言,即定义了用于定义其他与 ...
- Android tween 动画 XML 梳理
前言: Tween动画是展现出旋转.渐变.移动.缩放的这么一种转换过程,即补间动画.Tween动画有两种定义方式:XML形式,编码形式.这次主要来梳理XML的方式配置动画 (1)XML定义动画,按照动 ...
- 【Python】Python XML 读写
class ACTIVE_FILE_PROTECT_RULE_VIEW(APIView): renderer_classes = (JSONRenderer, BrowsableAPIRenderer ...
- python xml.etree ElementTree解析 编辑 xml
python有很多种xml解析方式,不过感觉etree的ElementTree 用起来最方便. #coding=utf-8 from xml.etree import ElementTree impo ...
- python - XML文件及其操作
xml文件也是实现不同语言或者程序之间进行数据交换的协议,它的特点是尖括号开头,尖括号结尾.使用范围就更为广泛了,tomcat resin kvm 等等,使用了大量的xml文件来进行相关配置.先来看一 ...
- Python: xml转json
1,引言 GooSeeker早在9年前就开始了Semantic Web领域的产品化,MS谋数台和DS打数机是其中两个产品.对web内容做结构化转换和语义处理的主要路线是 XML -> RDF - ...
随机推荐
- [CF1017G]The Tree[树链剖分+线段树]
题意 给一棵一开始 \(n\) 个点全是白色的树,以 \(1\) 为根,支持三种操作: 1.将某一个点变黑,如果已经是黑色则该操作对所有儿子生效. 2.将一棵子树改成白色. 3.询问某个点的颜色. \ ...
- SSISDB6:参数和环境变量
SSISDB 系列随笔汇总: SSISDB1:使用SSISDB管理Package SSISDB2:SSIS工程的操作实例 SSISDB3:Package的执行实例 SSISDB4:当前正在运行的Pac ...
- linux centos 中Tomcat的安装和自启动配置
Tomcat的安装和自启动配置将tomcat添加为linux系统服务,网上找到了很多方法,其中比较简单的如下:方法一:(亲测有效)1. 首先需要将$Tomcat_HOME/bin目录下的catalin ...
- 使用pyspark模仿sqoop从oracle导数据到hive的主要功能(自动建表,分区导入,增量,解决数据换行符问题)
最近公司开始做大数据项目,让我使用sqoop(1.6.4版本)导数据进行数据分析计算,然而当我们将所有的工作流都放到azkaban上时整个流程跑完需要花费13分钟,而其中导数据(增量)就占了4分钟左右 ...
- ConceptVector: Text Visual Analytics via Interactive Lexicon Building using Word Embedding
论文简介 本文是对词嵌入的一种应用,用户可以根据自己的需要创建concept,系统根据用户提供的seed word推荐其他词汇,以帮助用户更高的构建自己的concept.同时用户可以利用自己创建的 ...
- Unity XLua 官方教程学习
一.Lua 文件加载 1. 执行字符串 using UnityEngine; using XLua; public class ByString : MonoBehaviour { LuaEnv lu ...
- 再探Redux Middleware
前言 在初步了解Redux中间件演变过程之后,继续研究Redux如何将中间件结合.上次将中间件与redux硬结合在一起确实有些难看,现在就一起看看Redux如何加持中间件. 中间件执行过程 希望借助图 ...
- 1. Python3 环境搭建
Python3 环境搭建 开门见山,其他关于Python发展史.语言类型.优缺点等等 可以自己去百度百度,这里就不多说了.其实基本想要学这门语言的时候,你已经了解差不多了!!! Python的运行环境 ...
- CVE-2010-2883
测试环境: Windows xp sp3 Adobe Reader 9.3.4 成因: CoolType.dll库的strcat函数在解析SING表中的uniqueName域时未作长度检查而造成栈溢出 ...
- JavaScript学习笔记之JavaScript调用C#编写的COM组件
1.新建一个C#类库项目:MyCom: 2.修改 Properties 目录下的 AssemblyInfo.cs(程序集文件) 中的 ComVisible 属性为 true: 3.项目->属性- ...