You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python获取XML元素值?minidom代码读取内容遇阻求助

解决Python minidom读取XML元素值的问题

我来帮你搞定这个XML解析的问题!你的代码主要踩了minidom解析XML时的几个常见坑,比如空白节点的干扰、元素层级遍历错误,还有属性获取的位置不对,下面一步步给你修正:

先梳理核心问题点

  • minidom会把XML里的换行、空格等空白字符当作文本节点,直接用childNodes[index]大概率拿到的不是你要的元素节点
  • 你错误地从book元素获取lang属性,但实际这个属性是在title元素上的
  • 遍历逻辑混乱:应该从当前bookstore下遍历子book,而不是用全局的listaLibros;每个book的author是它自己的子元素,不能用全局的listaAutores
  • 获取元素文本内容的方式不对,应该先定位到具体元素,再提取它的文本

修正后的完整代码

from xml.dom import minidom

# 解析XML文件
arbol_dom = minidom.parse('C:\\Users\\MiguelRG\\Desktop\\sge\\Pythons\\e3.xml')

# 获取唯一的书店节点(你的XML中只有一个书店)
bookstore = arbol_dom.getElementsByTagName("bookstore")[0]

# 输出书店信息
print(f"书店标签名: {bookstore.tagName}")
print(f"书店名称: {bookstore.getAttribute('name')}")
print(f"是否包含子节点: {bookstore.hasChildNodes()}")
print("="*50)

# 遍历书店下的每一本书
for book in bookstore.getElementsByTagName("book"):
    # 输出书籍分类
    print(f"书籍分类: {book.getAttribute('category')}")
    
    # 获取书名和语言属性
    title_node = book.getElementsByTagName("title")[0]
    print(f"书名: {title_node.firstChild.nodeValue}")
    print(f"语言: {title_node.getAttribute('lang')}")
    
    # 获取出版年份
    year_node = book.getElementsByTagName("year")[0]
    print(f"出版年份: {year_node.firstChild.nodeValue}")
    
    # 获取价格
    price_node = book.getElementsByTagName("price")[0]
    print(f"价格: {price_node.firstChild.nodeValue}")
    
    # 获取当前书籍的作者信息
    author_node = book.getElementsByTagName("author")[0]
    writer_node = author_node.getElementsByTagName("writer")[0]
    resumer_node = author_node.getElementsByTagName("resumer")[0]
    print(f"作者: {writer_node.firstChild.nodeValue}")
    print(f"简介整理者: {resumer_node.firstChild.nodeValue}")
    
    print("-"*50)

代码改进说明

  1. 精准定位节点:直接获取唯一的bookstore节点,避免全局遍历的混乱
  2. 层级遍历正确:从当前bookstore下遍历子book,每个book的子元素(title、author等)都从自身节点查找,确保对应关系正确
  3. 规避空白节点:用getElementsByTagName精准定位目标元素,再通过firstChild.nodeValue获取文本内容(此时元素下的第一个子节点就是纯文本,不会被空白干扰)
  4. 属性获取正确:从title元素获取lang属性,符合XML结构

运行输出示例

书店标签名: bookstore
书店名称: Libreria Pastor
是否包含子节点: True
==================================================
书籍分类: COOKING
书名: Everyday Italian
语言: en
出版年份: 2005
价格: 30.00
作者: Giada De Laurentiis
简介整理者: Pepe Lopez
--------------------------------------------------
书籍分类: CHILDREN
书名: Harry Potter
语言: en
出版年份: 2005
价格: 29.99
作者: J K. Rowling
简介整理者: Ana Martinez
--------------------------------------------------
书籍分类: PROGRAMMING
书名: Python for All
语言: en
出版年份: 2015
价格: 39.99
作者: M.L. Jobs
简介整理者: Delton Jones
--------------------------------------------------

这样就完美实现了你想要的输出顺序:先书店信息,再每本书的详细信息,最后对应作者的内容。

内容的提问来源于stack exchange,提问作者FreeZe21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:02:37