39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml
parseString 方法
parseString 方法是 Python 标准库中 xml.dom.minidom 模块中的一个函数,用于解析 XML 字符串并构建 DOM 树。它的语法如下:
xml.dom.minidom.parseString(xmlstring)
其中,xmlstring 是要解析的 XML 字符串。 使用 parseString 方法可以将 XML 字符串解析为一个 DOM树,然后可以使用 DOM 树提供的方法对 XML 文档进行遍历和操作。
以下是一个使用 parseString 方法解析 XML 字符串的简单示例:
import xml.dom.minidom
xmlstring = '<person><name>Alice</name><age>18</age></person>'
# 解析 XML 字符串
dom = xml.dom.minidom.parseString(xmlstring)
# 获取根节点
root = dom.documentElement
# 获取子节点
name = root.getElementsByTagName('name')[0]
age = root.getElementsByTagName('age')[0]
# 获取节点的文本内容
name_text = name.firstChild.data
age_text = age.firstChild.data
print(name_text, age_text)
- 在这个示例中,我们使用 parseString 方法解析了一个 XML 字符串,并获取了根节点和子节点。然后我们使getElementsByTagName 方法获取指定标签名的节点,并使用 firstChild.data获取节点的文本内容。最后,我们输出了节点的文本内容。
需要注意的是,使用 parseString 方法解析 XML 字符串时,如果 XML 字符串格式不正确,会抛出异常。此外,使用 minidom 解析大型 XML 文档时可能会导致性能问题。
Python 解析XML实例
以下是一个使用 Python 解析 XML 的实例,其中使用了 ElementTree 解析库:
XML 文件内容(example.xml):
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
Python 代码:
import xml.etree.ElementTree as ET
# 解析 XML 文件
tree = ET.parse('example.xml')
# 获取根节点
root = tree.getroot()
# 遍历子节点
for child in root:
print(child.tag, child.attrib)
# 获取指定节点
book = root.find(".//book[@category='WEB']")
title = book.find('title').text
author = book.find('author').text
year = book.find('year').text
price = book.find('price').text
print(title, author, year, price)
# 使用 XPath 查询
books = root.findall(".//book[price < 30]")
for book in books:
title = book.find('title').text
author = book.find('author').text
year = book.find('year').text
price = book.find('price').text
print(title, author, year, price)
输出结果:
book {'category': 'COOKING'}
book {'category': 'CHILDREN'}
book {'category': 'WEB'}
Learning XML Erik T. Ray 2003 39.95
Everyday Italian Giada De Laurentiis 2005 30.00
在这个示例中,我们使用 ElementTree 解析库解析了一个 XML 文件,并使用 getroot() 方法获取了根节点。然后我们使用
for 循环遍历根节点的所有子节点,并输出节点的标签和属性。接着我们使用 find() 方法获取指定节点的文本内容。最后,我们使用
XPath 查询获取所有价格小于 30 的书籍,并输出书籍的信息。
使用xml.dom解析xml
在 Python 中,解析 XML 文件的另一种常用方法是使用 xml.dom 模块中的 minidom 类。该类提供了一种基于 DOM(Document Object Model)的解析方式,将整个 XML 文件加载到内存中,并将其表示为一个树形结构。
以下是一个示例代码:
import xml.dom.minidom
# 解析 XML 文件
dom = xml.dom.minidom.parse('example.xml')
# 获取根元素
root = dom.documentElement
# 遍历 XML 文件
for child in root.childNodes:
if child.nodeType == child.ELEMENT_NODE:
print(child.tagName, child.attributes.items())
for subchild in child.childNodes:
if subchild.nodeType == subchild.ELEMENT_NODE:
print(subchild.tagName, subchild.firstChild.nodeValue)
- 在这个例子中,我们首先使用 xml.dom.minidom.parse() 方法解析名为 example.xml 的 XML文件,并将返回的 Document 对象存储在变量 dom 中。然后,我们使用dom.documentElement 方法获取 XML文件的根元素,并将其存储在变量 root 中。
- 接下来,我们使用 childNodes 属性遍历根元素的子元素,并使用 nodeType属性判断节点类型是否为元素节点。如果是元素节点,我们就使用 tagName 属性获取元素的标签名,使用
attributes.items() 方法获取元素的属性,并打印它们。然后,我们再次使用 childNodes属性遍历每个子元素的子元素,并使用 nodeType 属性判断节点类型是否为元素节点。如果是元素节点,我们就使用 tagName属性获取元素的标签名,使用 firstChild.nodeValue 属性获取元素的文本内容,并打印它们。 - 需要注意的是,在使用 xml.dom.minidom 模块解析 XML 文件时,需要将整个 XML 文件加载到内存中,因此对于较大的XML 文件可能会导致性能问题。此外,使用 childNodes 属性和 nodeType 属性遍历 XML元素也比较繁琐,需要进行多次判断和类型转换。
总的来说,使用 xml.dom.minidom 模块解析 XML 文件可以提供一种基于 DOM 的解析方式,适用于小型的 XML 文件和简单的 XML 结构。对于更复杂的 XML 文件和结构,可能需要使用其他方法或库来解析和操作它们。