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

无法获取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:在字符串上调用getAttribute
    tagName是字符串类型,而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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:50:06