XML文件处理

XML文件处理,有好几种方式,这里介绍一下xml.etree.ElementTree as ET。

注意:xml.etree.ElementTree模块在应对恶意结构数据时显得并不安全。

每个element对象都具有以下属性:

1. tag:string对象,表示数据代表的种类;

2. attrib:dictionary对象,表示附有的属性;

3. text:string对象,表示element的内容;

4. tail:string对象,表示element闭合之后的尾迹

5. 若干子元素(child elements)。

<tag attrib1=1>text</tab>tail

1     2       3         4

创建元素的方法有Element或者SubElement(),前者称作元素的构建函数(constructor),用以构建任一独存的元素;后者称作元素的制造函数(factory function),用以制造某一元素的子元素。

有了一串元素之后,使用ElementTree类来将其打包,把一串元素转换为xml文件或者XML文件中解析出来。

若想加快速度,可以使用C语言编译的API xml.etree.cElementTree。

在使用xml.etree.ElementTree时,一般都按如下导入:

try:
    import xml.etree.ElementTree as ET
  except ImportError:
    import xml.etree.cElementTree as ET

XML是中结构化数据形式,在ET中使用ElementTree代表整个XML文档,并视其为一棵树,Element代表这个文档树中的单个节点。

ET对象具有多种方法从不同来源导入数据,如下:

#从硬盘的xml文件读取数据
try:
import xml.etree.ElementTree as ET
except ImportError:
import xml.etree.cElementTree as ET tree = ET.parse("XML文件") #载入数据
root = tree.getroot()
print(root)
print(root.tag) #获取根节点

#遍历xml文档

try:
import xml.etree.ElementTree as ET
except ImportError:
import xml.etree.cElementTree as ET tree = ET.parse("XML文件") #载入数据
root = tree.getroot()
for child in root: #遍历节点
print(child.tag,child.attrib)
输出如下:
country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}

#只遍历year 节点

try:
import xml.etree.ElementTree as ET
except ImportError:
import xml.etree.cElementTree as ET tree = ET.parse("XML文件") #载入数据
root = tree.getroot()
for node in root.iter("year"):
print(node.tag,node.text)
输出如下:
year 2008
year 2011
year 201

修改和删除xml文档内容

try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET tree = ET.parse("XML文件") #载入数据
root = tree.getroot()
#修改
for node in root.iter("year"):
new_year = int(node.text) + #node.text()值,属性的值
node.text = str(new_year)
node.set("update","yes") tree.write("XML文件") #修改文件之后,重新写入文件里面,不然修改文件是无效的 #删除node
for country in root.findall("country"):
rank = int(country.find("rank").text)
if rank > :
root.remove(country) tree.write("output.xml")

文件操作中,每次修改完成数据之后,要重新写会文件之中,不然修改文件是没有用的。要重新写会文件才有效果。

Element中的遍历与查询

Element.iter(tag=None):遍历该Element所有后代,也可以指定tag进行遍历寻找。

try:
    import xml.etree.ElementTree as ET
  except ImportError:
    import xml.etree.cElementTree as ET
  tree = ET.parse("XML文件") #载入数据
  root = tree.getroot()
  for node in root.iter():
    print(node)

Element.findall(path):查找当前元素下tag或path能够匹配的直系节点。

Element.find(path):查找当前元素下tag或path能够匹配的首个直系节点。

Element.text: 获取当前元素的text值。

Element.get(key, default=None):获取元素指定key对应的属性值,如果没有该属性,则返回default值。

ElementTree对象

class xml.etree.ElementTree.ElementTree(element=None, file=None)
  element如果给定,则为新的ElementTree的根节点。   _setroot(element):用给定的element替换当前的根节点。慎用。
  
  # 以下方法与Element类中同名方法近似,区别在于它们指定以根节点作为操作对象。
  find(match)
  findall(match)
  findtext(match, default=None)
  getroot():获取根节点.
  iter(tag=None)
  iterfind(match)
  parse(source, parser=None):装载xml对象,source可以为文件名或文件类型对象.
  write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None,method="xml")

自己创建xml文档

import xml.etree.ElementTree as ET       

new_xml = ET.Element("namelist")                                     #根节点namelist
name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"}) #SubElement()子节点,new_xml的子节点
age = ET.SubElement(name,"age",attrib={"checked":"no"}) #创建子节点,name下的age节点
sex = ET.SubElement(name,"sex")
age.text = '' #写入值,age赋值
name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
age = ET.SubElement(name2,"age")
age.text = '' et = ET.ElementTree(new_xml) #生成文档对象
et.write("test.xml", encoding="utf-8",xml_declaration=True) ET.dump(new_xml) #打印生成的格式

day5模块学习--XML模块的更多相关文章

  1. python常用模块之xml模块

    python常用模块之xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,在json还没诞生的年代,大家都是使用xml,目前很多传统公司的系 ...

  2. day5模块学习 -- os模块学习

    python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...

  3. python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time & datetime模块

    正则表达式   语法:             mport re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0 ...

  4. python全栈开发-hashlib模块(数据加密)、suprocess模块、xml模块

    一.hashlib模块 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 ...

  5. python16_day06【类、RE模块、subprocess模块、xml模块、shelve模块】

    一.shelve模块 import shelve # 基于pickle模块, d = shelve.open('shelve_test') class Test(object): def __init ...

  6. python 之 random 模块、 shutil 模块、shelve模块、 xml模块

    6.12 random 模块 print(random.random()) (0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) [1,3] 大 ...

  7. logging模块、shutil模块、subprocess模块、xml模块

    logging模块 shutil模块 subprocess模块 xml模块 logging模块 函数式简单配置 import logging logging.debug('debug message' ...

  8. day5模块学习--hashlib模块

    hashlib模块     Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...

  9. day5模块学习--configparser模块

       使用ConfigParser模块读写ini文件(http://blog.csdn.net/linda1000/article/details/11729561) ConfigParserPyth ...

随机推荐

  1. Docker部署Tomcat实例

    1.使用Docker部署Tomcat服务 http://www.open-open.com/lib/view/open1455717671698.html 2.搭建docker私有仓库 http:// ...

  2. python中的模块及路径(2)

    如果我们要添加自己的搜索目录,有两种方法: 一是直接修改sys.path,添加要搜索的目录: >>> import sys >>> sys.path.append( ...

  3. Hadoop生态圈-Hive的自定义函数之UDAF(User-Defined Aggregation Function)

    Hadoop生态圈-Hive的自定义函数之UDAF(User-Defined Aggregation Function) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  4. PHP数组的遍历

    对于012345...这样的数组可以用for进行遍历 $arr=array('a','b','c','d','e'); for($key=0;$key<count($arr);$key++){ ...

  5. presto架构和原理

    Presto 是 Facebook 推出的一个基于Java开发的大数据分布式 SQL 查询引擎,可对从数 G 到数 P 的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别,据称该引擎的性能是 ...

  6. 解析XML文件的几种常见操作方法:DOM/SAX/DOM4j

    <?xml version="1.0" encoding="utf-8"?> <root> <class name="c ...

  7. CSS3 实现的一个简单的"动态主菜单" 示例[转]

    其实这个示例蛮无聊的 很简单 也没什么实际的用处. 主要是展示了 CSS3 如何实现动画效果. 写这个主要是想看一看 完成这样的效果 我到底要写多少代码. 同时和我熟悉的java做个比较. 比较结果不 ...

  8. 【BZOJ】3456: 城市规划 动态规划+多项式求逆

    [题意]求n个点的带标号无向连通图个数 mod 1004535809.n<=130000. [算法]动态规划+多项式求逆 [题解]设$g_n$表示n个点的无向图个数,那么显然 $$g_n=2^{ ...

  9. 对于最近一星期jsp培训有感

    这周上课是jsp的培训,找的是外面的一个培训机构的讲师,人挺好的,讲的也不错,不过交给我们的任务是一星期做出一个网站模型——新闻发布系统. 由于我们组本科学计算机的人实在太少了,所以这个重担落在我的身 ...

  10. 系统学习(javascript)_基础(语法)

    1.分类 ECMAScript  javascript的标准 DOM  Document object Model文档对象模型 BOM  Browser object Model 浏览器对象模型 ti ...