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

Python3使用ElementTree提取XML标签内容存为字符串的方法

Python ElementTree 提取XML指定标签内容实现方案

场景说明

  • 运行环境:Python 3.7.2,使用标准库xml.etree.ElementTree
  • 待处理文件为带默认命名空间的ISO 20022 pain.001格式XML,目标是提取MsgId标签的文本内容,输出字符串类型,与原有minidom实现逻辑完全对齐
  • 原有minidom参考逻辑:通过getElementsByTagName递归遍历全文档匹配MsgId标签,读取标签内文本

待处理XML示例

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03">
   <CstmrCdtTrfInitn>
      <GrpHdr>
         <MsgId>nBblsUR-uH..6jmGgZNHLQAAAXgXN1Lu</MsgId>
         <CreDtTm>2016-11-10T12:00:00.000+01:00</CreDtTm> 
         <NbOfTxs>1</NbOfTxs>
         <CtrlSum>6</CtrlSum>
         <InitgPty>
            <Nm>TC 03000 Kunde 55 Protokollr ckf hrung</Nm>
         </InitgPty>
      </GrpHdr>
   </CstmrCdtTrfInitn>
</Document>

实现代码

注意:该XML根节点声明了默认命名空间,所有无前置前缀的标签都归属该命名空间,查找标签时必须传入命名空间映射,否则会匹配不到节点

import xml.etree.ElementTree as ET

# 配置命名空间映射,前缀可自定义,value对应XML根节点声明的默认命名空间
ns_map = {"p": "urn:iso:std:iso:20022:tech:xsd:pain.001.003.03"}
# 解析目标文件,路径规则和原有minidom逻辑保持一致
tree = ET.parse(f'H:\\app_python/in_spsh/{filename_string}')
root = tree.getroot()

# 递归查找全文档下所有MsgId节点,效果和minidom的getElementsByTagName完全一致
for msg_id_node in root.findall(".//p:MsgId", ns_map):
    msg_id_str = msg_id_node.text  # 直接取text属性即为字符串类型的标签内容
    print(msg_id_str)

简化写法

如果确认文档内仅存在一个MsgId节点,可以直接用find方法单次取值,不需要循环:

msg_id_str = root.find(".//p:MsgId", ns_map).text

常见踩坑

不要直接使用root.findall("MsgId")查找标签,未携带命名空间的查找语句无法匹配到属于默认命名空间下的节点,会返回空列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:48:15