python常用内置模块之xml模块

一.简介

xml是实现不同语言或程序之间进行数据交换的协议,可扩展标记语言,标准通用标记语言的子集。是一种用于标记电子文件使其具有结构性的标记语言。xml格式如下,是通过<>节点来区别数据结构的。

xml(可扩展标记语言),它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。从结构上,很像HTML超文本标记语言。但他们被设计的目的是不同的,html被设计用来显示

数据,其焦点是数据的外观。xml被设计用来传输和存储数据,其焦点是数据的内容。

二.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文件为例进行代码示例 

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" #text属性--文本 lastmod = ET.SubElement(url,"lastmod")#在根节点urlset下建立子节点,和loc是同级节点 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)   #ElementTree(tag)初始化一个ElemntTree对象,tag表示根节点 tree.write("sitemap.xml")      #ET对象方法write(),新建一个XML文件,并且将节点数数据写入XML文件中。 if __name__ == '__main__': build_sitemap()

生成的xml文件在浏览器打开显示为:

<urlset>
    <url>
        <loc>http://www/baidu.com</loc>
        <lastmod>2017-10-10</lastmod>
        <changefreq>daily</changefreq>
        <priority>1.0</priority>
    </url>
</urlset>                

解析和修改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

set()            设置属性

del  attrib[‘xxx’]           删除属性

还是以上面创建的sitemap.xml为例,对其进行一定的修改,代码示例如下:

from xml.etree import ElementTree as ET
tree = ET.parse("sitemap.xml")     #将xml文件加载并返回一个ET对象
url = tree.find("url")          #返回第一个匹配的子节点
for rank in tree.iter('loc'):      #创建一个以当前节点为根节点的iterator迭代器
    rank.text = "http://www.adminba.com"
tree.write("sitemap.xml")        #将节点数数据写入XML文件中。

将url修改为http://www.adminba.com了

<urlset>
    <url>
        <loc>http://www.adminba.com</loc>
        <lastmod>2017-10-10</lastmod>
        <changefreq>daily</changefreq>
        <priority>1.0</priority>
    </url>
</urlset>                

更多学习  https://www.cnblogs.com/wang-yc/p/5623393.html

python中文文档 https://docs.python.org/zh-cn/3/library/xml.html

参考自  https://www.cnblogs.com/ginvip/p/6891534.html 

猜你喜欢

转载自www.cnblogs.com/hemengjita/p/12349588.html