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

Python解析XML列获取元素值始终返回None如何解决

问题根因

你的代码有两个核心错误:

  1. column.find("name='mst1'")的写法逻辑错误:find()方法传入的参数是标签路径,你写的name='mst1'会被识别为「查找当前column节点下名为name='mst1'的子标签」,但column节点下没有任何子标签,只有纯文本内容,所以永远返回None。
  2. 标签对之间包裹的文本内容存储在节点的.text属性中,不需要调用find方法查找,直接读取即可。
    另外你贴出的XML片段缺少</resultset>、</resultsets>两个闭合标签,直接解析会报错,需要先补全。
修正后可运行代码
import xml.etree.ElementTree as ET

# 补全闭合标签后的完整XML内容
xml_str = """
<resultsets>
<resultset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<column name="mst1">T546FY</column>
<column name="mst2">dfghdfg</column>
<column name="mst3">2022-12-13 21:32:37.69</column>
<column name="mst4">89</column>
</row>
</resultset>
</resultsets>
"""
xroot = ET.fromstring(xml_str)

# 遍历所有column节点,同时获取属性和文本
for column in xroot.findall("./resultset/row/column"):
    col_name = column.get('name')
    col_value = column.text
    print(col_name, col_value)

# 单独查找name属性为mst1的节点,使用xpath属性匹配语法
mst1_col = xroot.find("./resultset/row/column[@name='mst1']")
if mst1_col:
    print("mst1字段值:", mst1_col.text)
运行输出
mst1 T546FY
mst2 dfghdfg
mst3 2022-12-13 21:32:37.69
mst4 89
mst1字段值: T546FY
关键说明
  • 按属性查找节点时,属性匹配规则要写在xpath路径里,格式为[@属性名='属性值'],不能单独作为find的参数传入。
  • 节点直接包裹的纯文本统一存在.text属性下,节点嵌套的子标签才需要用find/findall查找。

内容的提问来源于stack exchange,提问作者CoolStoryBro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:25:05