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

Python从XML字符串提取日期报错:AttributeError: 'NoneType'无group属性

解决XML嵌套标签cbc:DueDate的提取问题

报错原因

你的代码报错AttributeError: 'NoneType' object has no attribute 'group',是因为直接将<cbc:Description>节点转为字符串时,得到的是DOM节点的对象描述(而非节点内部的XML内容),导致正则表达式找不到匹配的<cbc:DueDate>标签,re.search返回None,调用group()自然报错。

解决方案

方案1:修复节点内容获取逻辑(基于原生xml.dom)

先正确提取<cbc:Description>节点内部的XML内容,再用正则匹配:

from xml.dom import minidom
import re

# 假设datos是已解析完成的DOM对象
desc_node = datos.getElementsByTagName("cbc:Description")[0]
# 拼接节点内部所有子节点的XML内容
inner_xml = ""
for child in desc_node.childNodes:
    inner_xml += child.toxml()

# 正则匹配提取日期
match_result = re.search(r'<cbc:DueDate>(.+?)</cbc:DueDate>', inner_xml)
if match_result:
    due_date = match_result.group(1)
    print(due_date)  # 输出:2022-07-16
else:
    print("未找到<cbc:DueDate>标签")

方案2:用XPath直接定位(更简洁,推荐)

使用lxml库通过XPath直接定位嵌套标签,避免正则处理XML的繁琐:

  1. 先安装依赖:pip install lxml
  2. 代码示例:
from lxml import etree

# 解析目标XML文件
tree = etree.parse("你的XML文件路径.xml")
# 配置XML命名空间(需替换为你XML中cbc前缀对应的实际命名空间,可在根节点找到)
namespaces = {"cbc": "http://实际命名空间URL"}
# 用XPath直接提取<cbc:DueDate>的文本内容
due_date = tree.xpath('//cbc:Description/cbc:DueDate/text()', namespaces=namespaces)[0]
print(due_date)  # 输出:2022-07-16

注意:XML中的前缀(如cbc)都对应一个官方命名空间URL,必须在代码中指定,否则XPath无法识别节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:15:35