两种解析方式

1、from xml.etree import ElementTree as ET

利用ElementTree模块下的xml方法可以把一个字符串类型的东西转换成Element类,从而利用Element类下面的方法

xml(字符串)解析方式只能读不能写

from xml.etree import ElementTree as ET

# 打开文件,读取XML内容
str_xml = open('xo.xml', 'r').read() # 将字符串解析成xml特殊对象,root代指xml文件的根节点
root = ET.XML(str_xml)
from xml.etree import ElementTree as ET
a=open("first_xml","r",encoding="utf-8").read()
print(type(a))
b=ET.XML(a)       其中b为根节点         #利用xml方法可以的到一个Element类
print(type(b)) <class 'str'>                    输入一个字符串类型的转成Element类
<class 'xml.etree.ElementTree.Element'>
def XML(text, parser=None):
"""Parse XML document from string constant. This function can be used to embed "XML Literals" in Python code. *text* is a string containing XML data, *parser* is an
optional parser instance, defaulting to the standard XMLParser. Returns an Element instance.

Element下面的方法:

1、  iter所查看的东西)返回所匹配到的元素的迭代器     用于找到某一类节点并去循环

  Return an iterator containing all the matching elements.

2、   tag  返回节点的标签名

3、   attrib 返回标签的属性

4、  find()找到第一个匹配到的对象并返回   只能找儿子不能找孙子

5、    txet 获取标签的内容

2、parse(文件名)打开文件并解析,相比于xml少了打开文件那一步

from xml.etree import ElementTree as ET

# 直接解析xml文件
tree = ET.parse("xo.xml") # 获取xml文件的根节点
root = tree.getroot()      通过getroot获取根节点
from xml.etree import ElementTree as ET
a=ET.parse("first_xml")          #解析成ElementTree类的对象
b=a.getroot()                #转换成Element类的对象
print(a.getroot(),type(a)) <Element 'data' at 0x00000033D062F958> <class 'xml.etree.ElementTree.ElementTree'>
def parse(source, parser=None):
"""Parse XML document into element tree. *source* is a filename or file object containing XML data,
*parser* is an optional parser instance defaulting to XMLParser. Return an ElementTree instance. """
tree = ElementTree()
tree.parse(source, parser)
return tree

ElementTree下面的方法:

1、  getroot()     获取xml文件的根节点    与xml不同(通过xml()直接获取根节点,而parse()还的再通过getroot获取根节点)

2、  根节点.tag       获取节点的标签(这里与xml不同的是先利用getroot()得到根节点再tag)

3、  根节点.attrib    获取节点的属性(原理同上)

4、  text               获取标签的内容

5、  a.write(文件名)写入文件

from xml.etree import ElementTree as ET
a=ET.parse("first_xml")
b=a.getroot()
for i in b.iter("year"):
new_year=int(i.text)+1
i.text=str(new_year)
a.write("first_xml")

6、  标签名.set("k1","k2")    为标签添加属性

7、  del 标签名 attrib["k1"]  删除标签的属性,如果标签名无属性,删除报错

3、创建一个XML文档

方法1

from xml.etree import ElementTree as ET
a=ET.Element("aaa") #创建根节点
b=ET.Element("bbb",{"k1":"k2"}) #创建子节点
c=ET.Element("ccc",{"k2":"k3"})
d=ET.Element("ddd",{"k3":"k4"}) a.append(b)
b.append(c)
c.append(d)
  #生成文档对象
et = ET.ElementTree(a) *******#生成文档对象********
et.write("test.xml", encoding="utf-8", xml_declaration=True, short_empty_elements=False)

方法2

from xml.etree import ElementTree as ET

# 创建根节点
root = ET.Element("famliy") # 创建大儿子
# son1 = ET.Element('son', {'name': '儿1'})
son1 = root.makeelement('son', {'name': '儿1'})
# 创建小儿子
# son2 = ET.Element('son', {"name": '儿2'})
son2 = root.makeelement('son', {"name": '儿2'}) # 在大儿子中创建两个孙子
# grandson1 = ET.Element('grandson', {'name': '儿11'})
grandson1 = son1.makeelement('grandson', {'name': '儿11'})
# grandson2 = ET.Element('grandson', {'name': '儿12'})
grandson2 = son1.makeelement('grandson', {'name': '儿12'}) son1.append(grandson1)
son1.append(grandson2) # 把儿子添加到根节点中
root.append(son1)
root.append(son1)
  #生成文档对象
tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False)

方法3

from xml.etree import ElementTree as f
# 创建根节点
a=f.Element("QWE")
# 创建儿子
b=f.SubElement(a,"asd",{"k1":"v1"})
# 创建孙子
c=f.SubElement(b,"fgh",{"k2":"v2"})
  #生成文档对象
z=f.ElementTree(a)
z.write("ad.xml",encoding="utf-8")

控制节点自闭合

short_empty_elements=False

加上节点不能自闭合    <grandson name="儿12"></grandson>

不加自闭合               <grandson name="儿12" />

注释

xml_declaration=True

加上使xml文件有注释  <?xml version='1.0' encoding='utf-8'?>

由于原生保存的XML时默认无缩进,如果想要设置缩进的话, 需要修改保存方式:

from xml.etree import ElementTree as ET
from xml.dom import minidom def prettify(elem):
"""将节点转换成字符串,并添加缩进。
"""
rough_string = ET.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent="\t") # 创建根节点
root = ET.Element("famliy") # 创建大儿子
# son1 = ET.Element('son', {'name': '儿1'})
son1 = root.makeelement('son', {'name': '儿1'})
# 创建小儿子
# son2 = ET.Element('son', {"name": '儿2'})
son2 = root.makeelement('son', {"name": '儿2'}) # 在大儿子中创建两个孙子
# grandson1 = ET.Element('grandson', {'name': '儿11'})
grandson1 = son1.makeelement('grandson', {'name': '儿11'})
# grandson2 = ET.Element('grandson', {'name': '儿12'})
grandson2 = son1.makeelement('grandson', {'name': '儿12'}) son1.append(grandson1)
son1.append(grandson2) # 把儿子添加到根节点中
root.append(son1)
root.append(son1) raw_str = prettify(root) f = open("xxxoo.xml",'w',encoding='utf-8')
f.write(raw_str)
f.close()

 自己写的

from xml.etree import ElementTree as f
from xml.dom import minidom
def prettify(elem):
"""将节点转换成字符串,并添加缩进。
"""
rough_string = f.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent="\t")
a=f.Element("QWE")
b=a.makeelement("asd",{"K1":"V2"})
c=a.makeelement("zxc",{"K1":"V2"})
a.set("name","lu")
a.append(b)
b.append(c)
z=prettify(a) #转成字符串了直接写入
s=open("xxxx.xml","w")
s.write(z)
s.close()

xml中俩种解析方式的更多相关文章

  1. Android平台中实现对XML的三种解析方式

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  2. xml常用四种解析方式优缺点的分析×××××

    xml常用四种解析方式优缺点的分析 博客分类: xml   最近用得到xml的解析方式,于是就翻了翻自己的笔记同时从网上查找了资料,自己在前人的基础上总结了下,贴出来大家分享下. 首先介绍一下xml语 ...

  3. XML 的4种解析方式

    在上一篇博客中,我们介绍了什么是 XML ,http://www.cnblogs.com/ysocean/p/6901008.html,那么这一篇博客我们介绍如何来解析 XML . 部分文档引用:ht ...

  4. Web.xml中四种验证方式

    源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...

  5. XML解析——Java中XML的四种解析方式

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...

  6. XML解析——Java中XML的四种解析方式(转载 by 龍清扬)

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...

  7. Java中XML的四种解析方式(二)

    三.JDOM解析 特征: 1.仅使用具体类,而不使用接口. 2.API大量使用了Collections类. import org.jdom2.Attribute; import org.jdom2.D ...

  8. Java中XML的四种解析方式(一)

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析的方式都是一样的,只不过实现的语法不同而已. XML文档以层级标签的 ...

  9. XML的两种解析方式

    JDK提供的XML解析方式分为两种:DOM方式和SAX方式DOM:Document Object Model.需要读取整个XML文档,先需要在内存中构架代表整个DOM树的Document对象,可以进行 ...

随机推荐

  1. Linux LVM简明教程

    逻辑卷管理LVM是一个多才多艺的硬盘系统工具.无论在Linux或者其他类似的系统,都是非常的好用.传统分区使用固定大小分区,重新调整大小十分麻烦.但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物 ...

  2. 黄聪:让WordPress主题支持语言本地化(使用poedit软件实现中文翻译功能)

    如果你的WordPress主题要提交到WordPress官方主题库,使用者来自世界各地的多种语言,那么,你就要让你的WordPress主题支持语言本地化,方便使用者进行语言翻译和制作语言包. 让Wor ...

  3. 重新认识Entity Framework

    什么是Entity Framework Entity Framework是一个对象关系映射O/RM框架. Entity Framework让开发者可以像操作领域对象(domain-specific o ...

  4. Linux使用笔记: 定制core dump文件的文件名

    在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因.缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要 ...

  5. ADF_General JSF系列1_创建一个简单的JSF Application

    2015-02-17 Creatd By BaoXinjian

  6. linux命令(9)设定固定ip

    一.使用命令设置ubuntu的ip地址 1.修改配置文件blacklist.conf禁用IPV6: sudo vi /etc/modprobe.d/blacklist.conf 2.在文档最后添加 b ...

  7. Win8下修改任務欄的資源管理器默認打開位置

    不能像win7一樣右鍵屬性改了,但還是有辦法的. 新建一個文件夾,建立快捷方式,右鍵快捷方式,將目標改為%windir%\explorer.exe /n,/e,D:\Desktop 然後將該快捷方式拖 ...

  8. JavaScript表单验证实例

    1. 长度限制<script>function test(){if(document.a.b.value.length>50){alert("不能超过50个字符!" ...

  9. 要件审判九步法及其基本价值 z

    要件审判九步法及其基本价值 发布时间:2014-12-24 14:29:05 作者介绍 邹碧华,男,1967年出生于江西奉新,毕业于北京大学法学院,获法学博士学位.上海市高级人民法院副院长.2006年 ...

  10. sql自动生成汉语拼音和首字母函数

    1.Sql server自动生成拼音的函数 /* 根据汉字获取全拼 1.生成所有读音临时表 2.根据Chinese_PRC_CS_AS_KS_WS 排序获取读音 */ )) ) as begin ) ...