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之一。