Python XML解析器– ElementTree
时间:2020-02-23 14:43:41 来源:igfitidea点击:
Python XML解析器为我们提供了一种读取XML文件并提取有用数据的简便方法。
今天,我们将研究python ElementTree XML API,并学习如何使用它来解析XML文件以及修改和创建XML文档。
Python XML解析器– Python ElementTree
Python ElementTree是使用Python编程语言提取,解析和转换XML数据的最有效API之一。
在本文中,我们将很好地了解如何以编程方式创建,读取,解析和更新文件中的XML数据。
让我们开始使用ElementTree的Python XML解析器示例。
Python ElementTree示例
我们将从一个非常简单的示例开始,以编程方式创建XML文件,然后,我们将转向更复杂的文件。
创建XML文件
在此示例中,我们将创建一个具有一个元素和一个子元素的新XML文件。
让我们立即开始:
import xml.etree.ElementTree as xml
def createXML(filename):
# Start with the root element
root = xml.Element("users")
children1 = xml.Element("user")
root.append(children1)
tree = xml.ElementTree(root)
with open(filename, "wb") as fh:
tree.write(fh)
if __name__ == "__main__":
createXML("test.xml")
一旦运行该脚本,将在同一目录中创建一个名为test.xml的新文件,其内容如下:
<users><user </users>
这里有两件事要注意:
写入文件时,我们使用wb模式而不是w模式,因为我们需要以二进制模式写入文件。
子用户标签是一个自动关闭的标签,因为我们没有其中添加任何子元素。
向XML元素添加值
通过向XML元素添加值来改进程序:
import xml.etree.ElementTree as xml
def createXML(filename):
# Start with the root element
root = xml.Element("users")
children1 = xml.Element("user")
root.append(children1)
userId1 = xml.SubElement(children1, "id")
userId1.text = "123"
userName1 = xml.SubElement(children1, "name")
userName1.text = "Shubham"
tree = xml.ElementTree(root)
with open(filename, "wb") as fh:
tree.write(fh)
if __name__ == "__main__":
createXML("test.xml")
运行此脚本后,我们将看到添加了新元素并添加了值。
这是文件的内容:
<users>
<user>
<id>123</id>
<name>Shubham</name>
</user>
</users>
这是完全有效的XML,并且所有标签均已关闭。
请注意,我自己格式化了XML,因为API一口气写出了完整的XML,这有点不完整!
现在,让我们开始编辑文件。
编辑XML数据
我们将使用上面显示的相同XML文件。
我们只是向其中添加了一些数据:
<users>
<user>
<id>123</id>
<name>Shubham</name>
<salary>0</salary>
</user>
<user>
<id>234</id>
<name>hyman</name>
<salary>0</salary>
</user>
<user>
<id>345</id>
<name>theitroad</name>
<salary>0</salary>
</user>
</users>
让我们尝试更新每个用户的薪水:
import xml.etree.ElementTree as xml
def updateXML(filename):
# Start with the root element
tree = xml.ElementTree(file=filename)
root = tree.getroot()
for salary in root.iter("salary"):
salary.text = '1000'
tree = xml.ElementTree(root)
with open("updated_test.xml", "wb") as fh:
tree.write(fh)
if __name__ == "__main__":
updateXML("test.xml")
值得注意的是,如果您尝试将元素值更新为整数,将无法使用。
您将必须分配一个字符串,例如:
salary.text = '1000'
而不是做:
salary.text = 1000
Python XML解析器示例
这次,让我们尝试解析文件中存在的XML数据并打印数据:
import xml.etree.cElementTree as xml
def parseXML(file_name):
# Parse XML with ElementTree
tree = xml.ElementTree(file=file_name)
print(tree.getroot())
root = tree.getroot()
print("tag=%s, attrib=%s" % (root.tag, root.attrib))
# get the information via the children!
print("-" * 40)
print("Iterating using getchildren()")
print("-" * 40)
users = root.getchildren()
for user in users:
user_children = user.getchildren()
for user_child in user_children:
print("%s=%s" % (user_child.tag, user_child.text))
if __name__ == "__main__":
parseXML("test.xml")
在本文中,我们研究了如何提取,解析和转换XML文件。
ElementTree是执行这些任务的最有效的API之一。

