Python XML 文件 – 如何读取、写入和解析

什么是 XML?

XML 代表可扩展标记语言。它被设计用于存储和传输少量到中等量的数据,并广泛用于共享结构化信息。

Python 使您能够解析和修改 XML 文档。为了解析 XML 文档,您需要将整个 XML 文档加载到内存中。在本教程中,我们将看到如何使用 Python 中的 XML minidom 类来加载和解析 XML 文件。

如何使用 minidom 解析 XML

我们创建了一个将要解析的示例 XML 文件。

步骤 1)创建示例 XML 文件

在文件中,我们可以看到名字、姓氏、家和专业领域(SQL、Python、测试和业务)

How to Parse XML using minidom

步骤 2)使用 parse 函数加载和解析 XML 文件

解析文档后,我们将打印文档根节点的“节点名”和“第一个子标签名”。Tagname 和 nodename 是 XML 文件的标准属性。

Parse XML using minidom

  • 导入 xml.dom.minidom 模块并声明要解析的文件(myxml.xml)
  • 该文件包含有关员工的一些基本信息,如名字、姓氏、家、专业等。
  • 我们使用 XML minidom 的 parse 函数来加载和解析 XML 文件
  • 我们有一个变量 doc,doc 获取 parse 函数的结果
  • 我们想从文件中打印 nodename 和 child tagname,因此我们在 print 函数中声明它们
  • 运行代码 - 它会打印出 XML 文件中的 nodename (#document) 和 XML 文件中的第一个子标签名 (employee)

注意:

Nodename 和 child tagname 是 XML dom 的标准名称或属性。

步骤 3)调用 XML 文档中的 XML 标签列表并打印出来

接下来,我们还可以调用 XML 文档中的 XML 标签列表并打印出来。在这里,我们打印了技能集,如 SQL、Python、 测试 和业务。

Parse XML using minidom

  • 声明变量 expertise,我们将从中提取员工拥有的所有专业名称
  • 使用 dom 标准函数“getElementsByTagName”
  • 这将获取所有名为 skill 的元素
  • 声明一个循环遍历每个 skill 标签
  • 运行代码 - 它将提供四种技能的列表

如何写入 XML 节点

我们可以使用“createElement”函数创建一个新属性,然后将此新属性或标签附加到现有的 XML 标签。我们在 XML 文件中添加了一个新标签“BigData”。

  1. 您需要编写代码将新属性(BigData)添加到现有的 XML 标签
  2. 然后,您需要打印出附加了新属性的 XML 标签

Write XML Node

  • 要添加新的 XML 并将其添加到文档中,我们使用代码“doc.create elements”
  • 此代码将为我们的新属性“Big-data”创建一个新的 skill 标签
  • 将此 skill 标签添加到文档的第一个子节点(employee)
  • 运行代码 - 新标签“big data”将出现在其他专业列表旁边

XML 解析器示例

Python 2 示例

import xml.dom.minidom

def main():
# use the parse() function to load and parse an XML file
   doc = xml.dom.minidom.parse("Myxml.xml");
  
# print out the document node and the name of the first child tag
   print doc.nodeName
   print doc.firstChild.tagName
  
# get a list of XML tags from the document and print each one
   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
#Write a new XML tag and add it into the document
   newexpertise = doc.createElement("expertise")
   newexpertise.setAttribute("name", "BigData")
   doc.firstChild.appendChild(newexpertise)
   print " "

   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
if name == "__main__":
  main();

Python 3 示例

import xml.dom.minidom

def main():
    # use the parse() function to load and parse an XML file
    doc = xml.dom.minidom.parse("Myxml.xml");

    # print out the document node and the name of the first child tag
    print (doc.nodeName)
    print (doc.firstChild.tagName)
    # get a list of XML tags from the document and print each one
    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

    # Write a new XML tag and add it into the document
    newexpertise = doc.createElement("expertise")
    newexpertise.setAttribute("name", "BigData")
    doc.firstChild.appendChild(newexpertise)
    print (" ")

    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

if __name__ == "__main__":
    main();

如何使用 ElementTree 解析 XML

ElementTree 是一个用于操作 XML 的 API。ElementTree 是处理 XML 文件的简单方法。

我们将使用以下 XML 文档作为示例数据

<data>
   <items>
      <item name="expertise1">SQL</item>
      <item name="expertise2">Python</item>
   </items>
</data>

使用 ElementTree 读取 XML

我们必须首先导入 xml.etree.ElementTree 模块。

import xml.etree.ElementTree as ET

现在让我们获取根元素

root = tree.getroot()

以下是读取上述 xml 数据的完整代码

import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()

# all items data
print('Expertise Data:')

for elem in root:
   for subelem in elem:
      print(subelem.text)

输出

Expertise Data:
SQL
Python

摘要

Python 使您能够一次性解析整个 XML 文档,而不仅仅是每次一行。为了解析 XML 文档,您需要将整个文档加载到内存中。

  • 解析 XML 文档
  • 导入 xml.dom.minidom
  • 使用“parse”函数解析文档(doc = xml.dom.minidom.parse(文件名);
  • 使用代码 (=doc.getElementsByTagName(“xml 标签名称”)) 调用 XML 文档中的 XML 标签列表
  • 创建和添加新的 XML 文档属性
  • 使用“createElement”函数