Python解析XML列获取元素值始终返回None如何解决
问题根因
你的代码有两个核心错误:
column.find("name='mst1'")的写法逻辑错误:find()方法传入的参数是标签路径,你写的name='mst1'会被识别为「查找当前column节点下名为name='mst1'的子标签」,但column节点下没有任何子标签,只有纯文本内容,所以永远返回None。- 标签对之间包裹的文本内容存储在节点的
.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
相关产品推荐
相关产品推荐

