Python 解析XML文件

  • Post category:Python

Python 解析XML文件

什么是XML文件?

XML(Extensible Markup Language)是一种用于存储和传输数据的标记语言。XML文件包含一个文档结构,可以用来表示某种特定数据的层次结构。XML文件中的数据可以被解析和处理,使得它们能被计算机程序更方便地使用。

Python解析XML文件的模块

Python提供了多个模块来解析XML文件,常用的有以下两个:

  • xml.dom:可以通过使用Document Object Model(DOM)来解析XML文件,将XML文件解析成一棵树,然后通过树结构来访问XML节点;
  • xml.etree.ElementTree:使用 ElementTree 模块可以快速解析XML文件,通过使用Element对象来访问XML节点。

使用xml.etree.ElementTree解析XML文件

下面是使用xml.etree.ElementTree来解析XML文件的示例代码:

import xml.etree.ElementTree as ET

# 首先解析XML文件
tree = ET.parse('example.xml')

# 获取根节点
root = tree.getroot()

# 遍历XML文件的所有节点
for child in root:
    print(child.tag, child.attrib)
    for sub_child in child:
        print(sub_child.tag, sub_child.attrib, sub_child.text)

以上代码中:

  1. ET.parse('example.xml') 语句用于解析名为 ‘example.xml’ 的XML文件;
  2. tree.getroot() 用于获取XML文件的根节点;
  3. child.tag 语句用于获取某一节点的标签;
  4. child.attrib 语句用于获取某一节点的属性;
  5. sub_child.text 语句用于获取某一节点的文本内容。

使用xml.dom解析XML文件

下面是使用xml.dom来解析XML文件的示例代码:

import xml.dom.minidom

# 首先解析XML文件
DOMTree = xml.dom.minidom.parse('example.xml')
root = DOMTree.documentElement

# 遍历XML文件的所有节点
for child in root.childNodes:
    if child.nodeType == xml.dom.minidom.Node.ELEMENT_NODE:
        print(child.tagName, child.attributes['name'].value)
        for sub_child in child.childNodes:
            if sub_child.nodeType == xml.dom.minidom.Node.ELEMENT_NODE:
                print("  ", sub_child.tagName, sub_child.childNodes[0].data)

以上代码中:

  1. xml.dom.minidom.parse('example.xml') 语句用于解析名为 ‘example.xml’ 的XML文件;
  2. DOMTree.documentElement 用于获取XML文件的根节点;
  3. child.tagName 语句用于获取某一节点的标签;
  4. child.attributes['name'].value 语句用于获取某一节点的属性值;
  5. sub_child.childNodes[0].data 语句用于获取某一节点的文本内容。

示例

为了更好地说明如何解析XML文件,我们以下面的 XML 文件为例:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
   <book id="bk001">
      <author>哈利·波特</author>
      <title>Harry Potter</title>
      <genre>Fantasy</genre>
      <price>29.99</price>
      <publish_date>2005-01-01</publish_date>
      <description>A young wizard finds himself competing in a hazardous tournament between rival schools of magic.</description>
   </book>
   <book id="bk002">
      <author>绿野仙踪</author>
      <title>The Wonderful Wizard of Oz</title>
      <genre>Fantasy</genre>
      <price>44.95</price>
      <publish_date>2011-02-24</publish_date>
      <description>A young girl is whisked away to a magical land and embarks on a journey to see the Wizard who can help her return home.</description>
   </book>
</catalog>

在上面提到的两个解析XML文件的示例中,我们均使用了该XML文件进行解析,你也可以按照上面的示例代码将其解析。

注: 上面的示例代码中, example.xml 代表 XML 文件的文件名或路径,可以根据实际情况进行修改。