Python 中的 XML 解析?
pythonserver side programmingprogramming
Python XML 解析器提供了从 XML 文件中读取和提取有用信息的最简单方法之一。在本简短教程中,我们将了解如何使用 Python ElementTree XML API 解析 XML 文件、修改和创建 XML 文档。
Python ElementTree API 是提取、解析和转换 XML 数据的最简单方法之一。
那么让我们开始使用 ElementTree 的 Python XML 解析器:
示例 1
创建 XML 文件
首先,我们将创建一个包含元素和子元素的新 XML 文件。
#导入所需库 import xml.etree.ElementTree as xml def createXML(filename): # 从根元素开始 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("testXML.xml")
一旦我们运行上述程序,就会创建一个名为“textXML.xml”的新文件在我们当前的默认工作目录中:
其中包含以下内容:
<users><user /></users>
请注意,在写入文件时,我们使用了‘wb’模式。即以二进制模式写入文件。
向 XML 元素添加值
让我们为上述程序中的 XML 元素赋予一些值:
#Import required library 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 = "hello" userName1 = xml.SubElement(children1, "Name") userName1.text = "Rajesh" tree = xml.ElementTree(root) with open(filename, "wb") as fh: tree.write(fh) if __name__ == "__main__": createXML("testXML.xml")
运行上述程序后,我们会看到添加了新元素及其值,如下所示:
<users> <user> <Id>hello</Id> <Name>Rajesh</Name> </user> </users>
上述输出看起来不错。
现在让我们开始编辑文件:
编辑 XML 数据
让我们从现有程序的文件中添加一些数据。
newdata.xml
<users> <user> <id>1a</id> <name>Rajesh</name> <salary>NA</salary> </user> <user> <id>2b</id> <name>TutorialsPoint</name> <salary>NA</salary> </user> <user> <id>3c</id> <name>Others</name> <salary>NA</salary> </user> </users>
以上是我们当前的 xml 文件,让我们尝试更新每个用户的工资:
#导入所需的库 import xml.etree.ElementTree as ET def updateET(filename): # Start with the root element tree = ET.ElementTree(file=filename) root = tree.getroot() for salary in root.iter('salary'): salary.text = '500000' tree = ET.ElementTree(root) with open("newdata.xml", "wb") as fh: tree.write(fh) if __name__ == "__main__": updateET("newdata.xml")
输出
因此我们看到薪水从‘NA’变为‘500000’。
示例:Python XML 解析器
现在让我们编写另一个程序,它将解析文件中存在的 XML 数据并打印数据。
#导入所需的库 import xml.etree.cElementTree as ET def parseXML(file_name): # 使用 ElementTree 解析 XML tree = ET.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("-" * 25) print("Iterating using getchildren()") print("-" * 25) 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("newdata.xml")
输出
<Element 'users' at 0x0551A5A0> tag = users, attrib = {} ------------------------- Iterating using getchildren() ------------------------- id = 1a name = Rajesh salary = 500000 id = 2b name = TutorialsPoint salary = 500000 id = 3c name = Others salary = 500000