#练习:另一种遍历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. Vue为v-html中标签添加CSS样式

    在最近的vue项目中遇到的问题:v-html渲染的富文本,无法在样式表中修改样式: <template> <div class="msgHtmlBox" v-ht ...

  2. JAVA常识1

    DBA:                     https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86% ...

  3. 登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...

  4. Annotation方式配置AOP

    package com.xk.spring.kp04_aop.aop.s02_annotation; public interface IStudentService { public void sa ...

  5. django搭建博客

    https://andrew-liu.gitbooks.io/django-blog/content/index.html

  6. day039 数据库索引

    今日内容: 1.为什么要有索引 简而言之,索引出现的意义是为了更方便,更快速的查询数据. 什么是索引 索引在mysql中也叫''键''或'key'(primary key unique key,ind ...

  7. redis、memcached、mongoDB 对比

    Mongodb和Memcached不是一个范畴内的东西.Mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.Mongodb 和 Memcached不存在谁替换谁的问题. ...

  8. SQL-26 (二次分组)汇总各个部门当前员工的title类型的分配数目,结果给出部门编号dept_no、dept_name、其当前员工所有的title以及该类型title对应的数目count

    题目描述 汇总各个部门当前员工的title类型的分配数目,结果给出部门编号dept_no.dept_name.其当前员工所有的title以及该类型title对应的数目countCREATE TABLE ...

  9. linux 常用重启

    sudo reboot 为最常用重启 Linux centos关机与重启命令详解与实战 Linux centos重启命令: 1.reboot 普通重启 2.shutdown -r now 立刻重启(r ...

  10. 特殊权限set_uid

    set_uid:该权限针对二进制可执行文件,使文件执行阶段具有文件所有者的权限.比如passwd这个命令就具有该权限.当普通用户执行passwd命令时,可以临时获得root权限,从而可以更改密码. 作 ...