Python 中的 XML 解析?


Python XML 解析器提供了一种读取和提取 XML 文件中有用信息的最简单方法之一。在本简短教程中,我们将了解如何使用 python ElementTree XML API 解析 XML 文件、修改和创建 XML 文档。

Python ElementTree API 是提取、解析和转换 XML 数据最简单的方法之一。

那么让我们开始使用 ElementTree 使用 python XML 解析器吧

示例1

创建 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)

   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 required library
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 required library
import xml.etree.cElementTree as ET

def parseXML(file_name):
   # Parse XML with ElementTree
   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

更新于:2019年7月30日

2K+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始
广告