Python无pip依赖解析XML:关联书名与Score值,缺失值标记N/A
用Python原生库解析XML,正确关联书名与Score值(处理缺失项)
问题根源在于原代码是全局提取所有书名和所有Score值,导致无Score的书籍会错位匹配后续的Score。正确的做法是针对每个书籍节点单独处理,在单个节点的上下文内提取对应的数据,彻底避免错位。
示例XML
<library> <book> <title>Python编程:从入门到实践</title> <Score number="9.2"/> </book> <book> <title>流畅的Python</title> </book> <book> <title>Python Cookbook</title> <Score number="8.9"/> </book> </library>
修正后的代码
使用Python标准库xml.etree.ElementTree,无需额外安装第三方包:
import xml.etree.ElementTree as ET # 解析XML文件 tree = ET.parse('books.xml') root = tree.getroot() result = [] # 遍历每个book节点,独立提取单本书的数据 for book in root.findall('book'): # 获取书名 title = book.find('title').text # 在当前book节点下查找Score元素 score_element = book.find('Score') # 根据元素是否存在赋值,缺失则标记为N/A score_value = score_element.get('number') if score_element is not None else 'N/A' # 将当前书籍的信息加入结果列表 result.append([title, score_value]) # 输出结果 for entry in result: print(entry)
输出结果
['Python编程:从入门到实践', '9.2'] ['流畅的Python', 'N/A'] ['Python Cookbook', '8.9']
核心逻辑说明
- 遍历每个
<book>节点,确保每本书的书名和Score在同一上下文提取 - 使用
book.find('Score')仅在当前书籍节点内查找Score,避免全局匹配导致的错位 - 通过判断Score元素是否存在,用
N/A标记缺失项,符合需求
内容的提问来源于stack exchange,提问作者Marcus Availo
相关产品推荐
相关产品推荐

