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)
<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 文档。