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