xml 即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。从结构上,很像 html 超文本标记语言。但他们被设计的目的是不同的,超文本标记语言被设计用来显示数据,其焦点是数据的外观。它被设计用来传输和存储数据,其焦点是数据的内容。那么 Python 是如何处理 XML 语言文件的呢? 下面一起来看看 Python 常用内置模块之 xml 模块吧。
本文主要学习的 ElementTree 是 python 的 XML 处理模块,它提供了一个轻量级的对象模型。在使用 ElementTree 模块时,需要 import xml.etree.ElementTree 的操作。ElementTree 表示整个 XML 节点树,而 Element 表示节点数中的一个单独的节点。
构建 XML 文件
ElementTree(tag),其中 tag 表示根节点,初始化一个 ElementTree 对象。
Element(tag, attrib={}, **extra) 函数用来构造 XML 的一个根节点,其中 tag 表示根节点的名称,attrib 是一个可选项,表示节点的属性。
SubElement(parent, tag, attrib={}, **extra) 用来构造一个已经存在的节点的子节点 Element.text 和 SubElement.text 表示 element 对象的额外的内容属性,Element.tag 和 Element.attrib 分别表示 element 对象的标签和属性。
ElementTree.write(file, encoding='us-ascii', xml_declaration=None, default_namespace=None, method='xml'),函数新建一个 XML 文件,并且将节点数数据写入 XML 文件中。
下面以新建一个网站的 sitemap.xml 文件为例进行代码示例
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- from xml.etree import ElementTree as ET
- def build_sitemap():
- urlset = ET.Element("urlset") #设置一个根节点,标签为urlset
- url = ET.SubElement(urlset,"url") #在根节点urlset下建立子节点
- loc = ET.SubElement(url,"loc")
- loc.text = "http://www/baidu.com"
- lastmod = ET.SubElement(url,"lastmod")
- lastmod.text = "2017-10-10"
- changefreq = ET.SubElement(url,"changefreq")
- changefreq.text = "daily"
- priority = ET.SubElement(url,"priority")
- priority.text = "1.0"
- tree = ET.ElementTree(urlset)
- tree.write("sitemap.xml")
- if __name__ == '__main__':
- build_sitemap()
结果如下图所示:
解析和修改 XML 文件
ElementTree.parse(source, parser=None),将 xml 文件加载并返回 ElementTree 对象。parser 是一个可选的参数,如果为空,则默认使用标准的 XMLParser 解析器。
ElementTree.getroot(),得到根节点。返回根节点的 element 对象。
Element.remove(tag),删除 root 下名称为 tag 的子节点 以下函数,ElementTree 和 Element 的对象都包含。
find(match),得到第一个匹配 match 的子节点,match 可以是一个标签名称或者是路径。返回个 element findtext(match,default=None),得到第一个配置的 match 的 element 的内容 findall(match),得到匹配 match 下的所有的子节点,match 可以是一个标签或者是路径,它会返回一个 list,包含匹配的 elements 的信息 iter(tag),创建一个以当前节点为根节点的 iterator。
还是以上面创建的 sitemap.xml 为例,对其进行一定的修改,代码示例如下:
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- from xml.etree import ElementTree as ET
- tree = ET.parse("sitemap.xml")
- url = tree.find("url")
- for rank in tree.iter('loc'):
- rank.text = "http://www.adminba.com"
- tree.write("sitemap.xml")
以上的代码将 url 修改为 http://www.adminba.com 了。另外,节点还有 set(设置节点属性)、attrib(删除节点属性)方法。
这篇 Python 常用内置模块之 xml 模块 (详解) 就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持就爱阅读。
来源: http://www.92to.com/bangong/2017/05-25/22238337.html