无法获取XML标签属性求助:Python读取XML文件遇问题
问题分析与解决
核心问题
你的代码和XML都存在错误,导致无法正确获取属性:
1. XML格式错误
XML的结束标签不能包含属性,你写的</controls up='w'...>和</name name='dimitri'>是非法格式。正确写法应为开始标签带属性,结束标签仅保留标签名:
<user1> <controls up='w' down='s' left='a' right='d'></controls> <name name='dimitri'></name> </user1>
2. Python代码的两处错误
- 错误1:
firstChild可能获取空白文本节点
XML中的换行、空格会被解析为文本节点,u1.firstChild大概率拿到的是空白文本,而非<controls>元素,调用tagName会直接报错。 - 错误2:在字符串上调用
getAttributetagName是字符串类型,而getAttribute是DOM元素对象的方法,你错误地在字符串上调用该方法,必然触发异常。
修正后的Python代码
方法1:通过标签名直接获取元素(简单高效)
from xml.dom.minidom import parse # 解析XML文件 playerxml = parse('C:/Users/dimit/AppData/Local/Programs/Python/Python312/projects/save test.xml') # 通过标签名获取目标元素 controls = playerxml.getElementsByTagName('controls')[0] name = playerxml.getElementsByTagName('name')[0] # 获取属性并打印 print(controls.getAttribute("up")) print(controls.getAttribute("down")) print(controls.getAttribute("left")) print(controls.getAttribute("right")) print(name.getAttribute("name"))
方法2:遍历子节点过滤文本(适合标签名重复场景)
from xml.dom.minidom import parse playerxml = parse('C:/Users/dimit/AppData/Local/Programs/Python/Python312/projects/save test.xml') u1 = playerxml.firstChild # 遍历子节点,过滤掉空白文本节点 for child in u1.childNodes: if child.nodeType == child.ELEMENT_NODE: if child.tagName == 'controls': print(child.getAttribute("up")) print(child.getAttribute("down")) print(child.getAttribute("left")) print(child.getAttribute("right")) elif child.tagName == 'name': print(child.getAttribute("name"))
内容的提问来源于stack exchange,提问作者hypercoder
相关产品推荐
相关产品推荐

