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

如何用Python ElementTree定位XML中指定dateTypeCode的日期节点

解决思路

核心是先定位到包含日期和类型的父节点<CI_Date>,在这个节点内同时获取日期值和对应的类型标识,天然保留二者的配对关系,避免误修改。

实现步骤及代码
  1. 处理XML命名空间:XML中用到gco前缀,需先定义命名空间映射,确保ElementTree能正确解析带前缀的节点。
  2. 遍历<CI_Date>节点:每个<CI_Date>是日期和类型的共同父容器,遍历它即可同时拿到对应的日期节点和类型属性。
  3. 根据codeListValue匹配目标节点:提取每个<CI_Date>内CI_DateTypeCode的codeListValue属性,判断是否为目标类型(如revision),找到后修改对应<gco:Date>的文本值。

示例代码:

import xml.etree.ElementTree as ET

# 定义命名空间映射
namespaces = {
    'gco': 'http://www.isotc211.org/2005/gco'
}

# 加载XML文件(若为字符串可改用ET.fromstring)
tree = ET.parse('your_target.xml')
root = tree.getroot()

# 遍历所有CI_Date节点,每个节点对应一组日期+类型
for ci_date in root.findall('.//CI_Date'):
    # 获取当前节点的日期类型标识
    type_code_node = ci_date.find('./dateType/CI_DateTypeCode')
    if not type_code_node:
        continue
    target_type = type_code_node.get('codeListValue')
    
    # 定位到该组对应的日期节点
    date_node = ci_date.find('./date/gco:Date', namespaces)
    if not date_node:
        continue
    
    # 根据类型修改日期,示例:修改revision类型日期为2024-01-01
    if target_type == 'revision':
        date_node.text = '2024-01-01'
    # 可扩展其他类型的修改逻辑
    elif target_type == 'creation':
        date_node.text = '2024-02-01'

# 保存修改后的XML
tree.write('modified_xml.xml', encoding='utf-8', xml_declaration=True)
方案优势

原迭代函数会将日期和类型节点拆分为独立实体遍历,丢失了二者的关联关系。而以<CI_Date>为单位遍历,天然保留了日期与类型的配对逻辑,代码更简洁,定位也更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:45:43