xml.etree.ElementTree 模块实现了一个简单而高效的API解析和创建xml数据,该模块对恶意构造的数据是不安全的,如果需要解析不受信任或未经身份验证的数据,请参考 xml漏洞

2、解析xml

以下面xml文件作为示例数据
在这里插入图片描述
读取数据

import xml.etree.ElementTree as ET
tree = ET.parse(xml_path)
root = tree.getroot()
# result
<Element 'data' at 0x000002248A147A98>

生成的root有一个tag和字典属性

print(root.tag)
print(root.attrib)
# result

通过迭代来查看root的子节点的tag和attrib

for child in root:
    print(child.tag)
    print(child.attrib)
# result
country
{'name': 'Liechtenstein'}
country
{'name': 'Singapore'}
country
{'name': 'Panama'}

子节点是嵌套的,可以通过索引来访问特定的节点

root[1][2].text
# result
'59900'
3、获取xml中的元素

Element 中的一些方法,可以递归的遍历它下面的所有子树,如Element.iter()

for neighbor in root.iter('neighbor'):
    print(neighbor.attrib)
# result
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}

1.Element.findall(): 找到带有标签的元素,该标签是当前元素的直接子元素。
2.Element.find() :找到第一个带有特定标签的子元素。
3. Element.text:访问标签的内容
4. Element.get():访问标签的属性值

for country in root.findall('country'):
    rank = country.find('rank').text
    name = country.get('name')
    print('rank:', rank)
    print('name:', name)
    print('\n')
# result
rank: 1
name: Liechtenstein
rank: 4
name: Singapore
rank: 68
name: Panama
4、修改xml 文件

ElementTree提供了一种构建XML文档并将xml写入文件的简单方法。
1.ElementTree.write() :创建xml文件或向xml中写入数据。
2.Element.set():添加和修改标签的属性和属性值。
3.Element.append():添加子节点

假设将每个国家的排名加1,并添加updated 属性:

for rank in root.iter('rank'):
    new_rank = int(rank.text) + 1
    rank.text = str(new_rank)
    rank.set('updated', 'yes')
tree.write('output.xml')

输出结果显示如下:
在这里插入图片描述
4、Element.remove()移除元素,
移除排名大于50的国家

for country in root.findall('country'):
    rank = int(country.find('rank').text)
    if rank > 50:
        root.remove(country)
tree.write('output.xml')

输出结果显示如下:
在这里插入图片描述
5、创建xml文档
SubElement():用于创建新的子节点

a = ET.Element('a')
b = ET.SubElement(a, 'b')
c = ET.SubElement(a, 'c')
d = ET.SubElement(c, 'd')
ET.dump(a)
# result
<a><b /><c><d /></c></a>

6、解析xml空间
If the XML input has namespaces, tags and attributes with prefixes in the form prefix:sometag get expanded to {uri}sometag where the prefix is replaced by the full URI. Also, if there is a default namespace, that full URI gets prepended to all of the non-prefixed tags.

<?xml version="1.0"?>
<actors xmlns:fictional="http://characters.example.com"
        xmlns="http://people.example.com">
    <actor>
        <name>John Cleese</name>
        <fictional:character>Lancelot</fictional:character>
        <fictional:character>Archie Leach</fictional:character>
    </actor>
    <actor>
        <name>Eric Idle</name>
        <fictional:character>Sir Robin</fictional:character>
        <fictional:character>Gunther</fictional:character>
        <fictional:character>Commander Clement</fictional:character>
    </actor>
</actors>

搜索名称空间XML示例的更好方法是使用自己的前缀创建字典,并在搜索函数中使用这些前缀:

root = fromstring(xml_text)
for actor in root.findall('{http://people.example.com}actor'):
    name = actor.find('{http://people.example.com}name')
    print(name.text)
    for char in actor.findall('{http://characters.example.com}character'):
        print(' |-->', char.text)
ns = {'real_person': 'http://people.example.com',
      'role': 'http://characters.example.com'}
for actor in root.findall('real_person:actor', ns):
    name = actor.find('real_person:name', ns)
    print(name.text)
    for char in actor.findall('role:character', ns):
        print(' |-->', char.text)

输出结果:

John Cleese
 |--> Lancelot
 |--> Archie Leach
Eric Idle
 |--> Sir Robin
 |--> Gunther
 |--> Commander Clement
				
Python中有多种xml处理API,常用的有xml.dom.*模块、xml.sax.*模块、xml.parser.expat模块和xml.etree.ElementTree模块(以下简称ET)。本文将主要介绍ET的使用,以及它的常用函数。其它模块的简介,请参照文献[1]。 ET使用Element表示xml中的节点、文本、注释等。其主要属性如下: tag:string对象,表示数据代表
1、导入模块 →\rightarrow→ 读取文件 →\rightarrow→ 获取根节点 →\rightarrow→ 获取根节点的标签与属性 2、遍历一级子节点、获取子节点的标签 与 属性 3、通过索引 获取数据 rootrootroot是根节点 root[0]root[0]root[0] 是下一级子节点的第1个元素 root[0][1]root[0] [1]root[0][1]是下二级子节点的第2个元素 4、Element.findall()、Element.fin xml.etree.ElementTree模块实现了一个简单而高效的API用于解析和创建XML数据。xml.etree.ElementTree模块对于恶意构造的数据是不安全的。如果您需要解析不受信任或未经验证的数据,请参阅XML漏洞。 参考文献:https://docs.python.org/3.6/library/xml.etree.elementtree.html
`xml.etree.ElementTree` 是 Python 标准库中用于处理 XML 文档的模块,它提供了一种简单的方式来解析和操作 XML 元素树。以下是 `xml.etree.ElementTree` 的一些主要特性: - 支持解析 XML 文档和生成 XML 文档。 - 支持查找和访问 XML 元素,包括使用标签名、属性、路径等方式进行查找。 - 支持遍历 XML 元素树,包括深度优先和广度优先两种方式。 - 支持修改 XML 元素,包括添加、删除、修改元素和元素属性等。 - 支持将 XML 元素序列化为字符串或文件。 `xml.etree.ElementTree` 模块主要包含以下几个类和函数: - `Element`:表示一个 XML 元素,包含标签名、属性和子元素等信息。 - `SubElement`:创建一个新的 XML 子元素。 - `fromstring`:将一个字符串解析为一个 XML 元素。 - `parse`:将一个 XML 文件解析为一个 XML 元素。 - `ElementTree`:表示一个完整的 XML 文档,包含一个根元素和命名空间等信息。 - `dump`:将一个 XML 元素以可读的方式输出到控制台或文件。 除此之外,`xml.etree.ElementTree` 还支持一些高级特性,例如命名空间、CDATA、注释、XML声明等。这些特性可以帮助我们更好地处理复杂的 XML 文档。