#练习:另一种遍历xml文件的方式etree,xpath
import sys
try:
import xml.etree.cElementTree as ET #前面带c的都是比较快的,效率高且不占内存的,优先使用这个
except ImportError:
import xml.etree.ElementTree as ET

tree = ET.ElementTree(file='e:\\movie.xml')
root=tree.getroot()
print root.tag #打印根tag
print root.attrib #打印属性

for child_of_root in root:
print child_of_root.tag
print "********", child_of_root.attrib

print "*"*50

print root[0].tag
print root[0].text #“打印的内容为一个回车”
print root[0][0].tag
print root[0][0].text
print root[0][1].tag
print root[0][1].text

print "*"*50
for elem in tree.iter(): #递归遍历所有子元素
print elem.tag, elem.text, elem.attrib #属性返回的是一个字典

print "*"*50
for elem in tree.iterfind('movie/type'): #查找movie下一级节点中的所有type标签
print elem.tag, elem.text,elem.attrib

print "*"*50
for elem in tree.iter(tag='stars'): #在整个树中查找标签为star的元素
print elem.tag, elem.text,elem.attrib

print "*"*50
for elem in tree.iterfind('*[@title="Ishtar"]'): #在下一级节点查找属性为title="Ishtar"的元素
print elem.tag, elem.text,elem.attrib

print "*"*50
for elem in tree.iterfind('movie[@title="Ishtar"]'): #查找属性为title="Ishtar"的元素
print elem.tag, elem.attrib

print "*"*50
root = tree.getroot() #获取第一级movie元素
print "first movie:",root[0].tag #打印第一级movie元素的标签,为movie
print "subnode:",root[0][0].tag #打印第一级movie元素下的第一个子元素标签type
print "subnode:",root[0][1].tag #打印第一级movie元素下的第二个子元素标签format
print "subnode:",root[0][2].tag #打印第一级movie元素下的第三个子元素标签year
print "subnode:",root[0][3].tag #打印第一级movie元素下的第四个子元素标签rating
print "subnode:",root[0][4].tag #打印第一级movie元素下的第五个子元素标签stars
print "subnode:",root[0][5].tag #打印第一级movie元素下的第五个子元素标签description

print "*"*50
del root[0][4] #删除第一级movie元素下的第四个子元素
del root[0][3] #删除第一级movie元素下的第三个子元素
del root[0][2] #删除第一级movie元素下的第二个子元素
del root[0][1] #删除第一级movie元素下的第一个子元素

del root[3] #删除第四个movie元素
del root[2] #删除第三个movie元素

print "*"*50
for subelem in root:
print subelem.tag, subelem.attrib #打印第一个movie和第二个movie元素的标签和属性

print "*"*50
print tree.write(sys.stdout) #将xml文件的内容写到屏幕上
tree.write("e:\\movie.xml") #将变更的xml文件写入到文件中

#练习:生成xml
import sys
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET

a = ET.Element('elem') #生成一个节点elem,没有文本节点
c = ET.SubElement(a, 'child1') #生成一个字节点下的子节点child1
c.text = "some text" #在子节点上添加文本节点
d = ET.SubElement(a, 'child2') #生成一个字节点下的子节点child2
b = ET.Element('elem_b') #生成一个节点elem_b,没有文本节点
root = ET.Element('root') #生成一个节点root
root.extend((a, b)) #将a、b两个变量存储的节点elem和elem1添加到root节点下
tree = ET.ElementTree(root) #生成节点树
root[0].set('foo', 'bar') #设定第一个子元素的属性foo,值为bar
tree.write(sys.stdout) #打印节点树
tree.write("d:\\test.xml") #将xml文件内容写入到文本文件中

【Python】etree方法生成,解析xml的更多相关文章

  1. Dom方法,解析XML文件

    Dom方法,解析XML文件的基本操作 package com.demo.xml.jaxp; import java.io.IOException; import javax.xml.parsers.D ...

  2. java生成解析xml的另外两种方法Xstream

    Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...

  3. Python中使用ElementTree解析xml

    在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...

  4. 【Android】使用Pull生成/解析XML文件

    一.生成XML文件,即是将对象集合转为XML文件存储. 对象集合 –> XML(序列化) Android中使用android.util.Xml类对其进行了描述,提供相应的API. 步骤大致如下: ...

  5. Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件,封装函数

    总结了一下使用Python对xml文件的解析,用到的模块儿如下: 分别从xml字符串和xml文件转换为xml对象,然后解析xml内容,查询指定信息字段. from xml.dom.minidom im ...

  6. python开发_xml.dom_解析XML文档_完整版_博主推荐

    在阅读之前,你需要了解一些xml.dom的一些理论知识,在这里你可以对xml.dom有一定的了解,如果你阅读完之后. 下面是我做的demo 运行效果: 解析的XML文件位置:c:\\test\\hon ...

  7. java生成解析xml的另外两种方法JAXB

     JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反 ...

  8. Python—使用xm.dom解析xml文件

    什么是DOM? 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口. 一个 DOM 的解析器在解析一个 XML 文档时,一次性读 ...

  9. Python sax模块(SAX解析XML)

    XML样例: <?xml version="1.0"?> <collection shelf="New Arrivals"> <m ...

随机推荐

  1. 灵活运用 SQL SERVER FOR XML PATH 转

    灵活运用 SQL SERVER FOR XML PATH   FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些 ...

  2. 转-MySQL教程-写的很详细,赞一个

    原帖地址:https://www.w3cschool.cn/mysql/,谢谢原帖大人 MySQL是什么? MySQL安装 MySQL示例数据库 MySQL导入示例数据库 MySQL基础教程 MySQ ...

  3. CRM WEB UI 02搜索跳转到详细界面

    结合上一个,在上一个中,创建的是选择链接字段EBELN. 下面来实现点击EBELN跳转到详细界面: 1.创建ZLYTEST03_H组件,做详细界面. 2.创建概览页 DETOV. 3.创建视图集 DE ...

  4. 通过DBMS_REDEFINITION包对表在线重定义

    基础介绍 Oracle Online Redefinition可以保证在数据表进行DDL类型操作,如插入.删除数据列,分区处理的时候,还能够支持DML操作,特别是insert/update/delet ...

  5. python安装MySQLdb(即mysql-Python)模块的一些问题

    1.超时问题 如果出现:ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed out ...

  6. -bash: /etc/init.d/nginx: /bin/bash^M: bad interpreter: No such file or directory

    -bash: /etc/init.d/nginx: /bin/bash^M:bad interpreter: No such file or directory 这个使为了弄nginx自启的,然后在官 ...

  7. 自建yum源解决Ceph搭建过程中从官网取包慢的问题

    最近项目组需要ceph环境,第一次搭建ceph,各种不顺,装了卸,卸了装,一遍又一遍地按照官网的操作进行.最气人的是网速差,从官网取包太慢.一轮尝试就浪费一上午. 因此想到本地新建yum源. 首先,按 ...

  8. 牛客网 PAT 算法历年真题 1011 : 个位数统计 (15)

    个位数统计 (15) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定一个k位整数N = dk-1*10k- ...

  9. studio配置本地gradle-x.x.x-all.zip

    在引入别的项目时,一般会突然一直卡在了building...,下载网络gradle. 我们从网络下载gradle.zip到本地,通过将.\项目\gradle\wrapper下的gradle-wrapp ...

  10. js之单例

    所谓单例,指的是只有一个实例的对象. js通过对象字面量的方式来创建单例对象. var sig = { name:value, method:function(){ } }