Python XML解析器异常:获取元素值仅返回元素名,求修复
问题修复方案
你的问题出在XML结构和代码的查找逻辑不匹配,同时可能存在调用时的误解,以下是具体修复步骤:
1. 核心问题分析
你提供的XML文件中,根节点就是<user>,但你的代码里用root.findall('user')去查找根节点下的<user>子元素——这显然找不到任何匹配项,循环根本不会执行,函数最终返回None。你说返回"name",大概率是调用代码时误输出了参数element_name,而非函数的返回值。
2. 代码修复(适配当前XML结构)
修改代码,直接检查根节点是否为目标<user>:
import xml.etree.ElementTree as ET class get: @staticmethod def xml(id: str, element_name: str, xml_file: str): try: tree = ET.parse(xml_file) root = tree.getroot() # 直接检查根节点是否是目标user if root.tag == 'user' and root.get("id") == id: element = root.find(element_name) return element.text if element is not None else None # 兼容根节点包含多个user的情况(比如<users>作为根) for user in root.findall('user'): found_id = user.get("id") if found_id == id: element = user.find(element_name) return element.text if element is not None else None return None except ET.ParseError as e: print(f"Error parsing XML: {e}") return None
3. 可选:修正XML结构(推荐用于多用户场景)
如果你的实际需求是存储多个用户数据,建议把XML结构改成根节点包含多个<user>的形式,这样原代码的逻辑就能正常工作:
<?xml version="1.0" encoding="utf-8"?> <users> <user id="1"> <name>USER_NAME</name> <age>USER_AGE</age> <gender>USER_GENDER</gender> <sexuality>USER_SEXUALITY</sexuality> <dating_status>USER_DATING_STATUS</dating_status> <profession>USER_PROFESSION</profession> </user> <!-- 可以添加更多user节点 --> </users>
4. 正确调用示例
确保调用时输出的是函数返回值,而非参数:
# 正确调用 result = get.xml("1", "name", "your_file.xml") print(result) # 输出USER_NAME
内容的提问来源于stack exchange,提问作者Hollo
相关产品推荐
相关产品推荐

