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

如何从墨西哥SAT的CFDI XML文件中获取属性值

解决带命名空间的XML标签读取与UUID属性获取问题

你的代码无法找到tfd:TimbreFiscalDigital标签,核心原因有两个:

  • 没有为lxml提供命名空间映射,它不知道tfd:、cfdi:这些前缀对应的实际XML命名空间URI;
  • 标签路径不完整,TimbreFiscalDigital是嵌套在cfdi:Complemento下的,直接查找根节点下的tfd:TimbreFiscalDigital自然找不到。

修正后的代码示例

from lxml import etree

# 定义XML中用到的命名空间映射
namespaces = {
    'cfdi': 'http://www.sat.gob.mx/cfd/4',
    'tfd': 'http://www.sat.gob.mx/TimbreFiscalDigital'
}

xDoc = etree.parse(xmlFile)
# 使用完整路径+命名空间查找目标元素
folioFiscal = xDoc.find('cfdi:Complemento/tfd:TimbreFiscalDigital', namespaces=namespaces)

if folioFiscal is not None:
    # 获取UUID属性值
    uuid_value = folioFiscal.get('UUID')
    print(uuid_value)
else:
    print("未找到TimbreFiscalDigital标签")

补充说明

  • 命名空间字典必须和XML中xmlns:cfdi、xmlns:tfd定义的URI完全一致;
  • 如果需要批量查找或者更复杂的路径,可以用xpath方法简化操作:
    uuid_value = xDoc.xpath('//tfd:TimbreFiscalDigital/@UUID', namespaces=namespaces)[0]
    
    这种方式会直接返回UUID属性值的列表,取第一个元素即可(假设XML中只有一个该标签)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:44:57