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

相关文章