如何用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)
代码改进说明
- 精准定位节点:直接获取唯一的
bookstore节点,避免全局遍历的混乱 - 层级遍历正确:从当前
bookstore下遍历子book,每个book的子元素(title、author等)都从自身节点查找,确保对应关系正确 - 规避空白节点:用
getElementsByTagName精准定位目标元素,再通过firstChild.nodeValue获取文本内容(此时元素下的第一个子节点就是纯文本,不会被空白干扰) - 属性获取正确:从
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
相关产品推荐
相关产品推荐

