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

如何用Python读取含重复Keyword标签的XML并保留层级转字典

解决方案

要保留XML中<Keyword>标签的层级关系并转换为嵌套字典,需要递归遍历DOM树,而非使用getElementsByTagName获取所有标签的扁平列表。以下是修改后的代码:

import xml.dom.minidom as xmldom

def parse_keyword(element):
    """递归解析单个Keyword元素,返回对应的嵌套字典"""
    keyword_name = element.getAttribute('name')
    # 筛选当前元素下的子Keyword标签(忽略文本节点等非元素节点)
    child_keywords = [
        child for child in element.childNodes 
        if child.nodeType == child.ELEMENT_NODE and child.tagName == 'Keyword'
    ]
    
    if child_keywords:
        # 有子Keyword,递归构建嵌套字典
        children_dict = {}
        for child in child_keywords:
            children_dict.update(parse_keyword(child))
        return {keyword_name: children_dict}
    else:
        # 没有子Keyword,提取Value/value属性值
        keyword_value = element.getAttribute('Value') or element.getAttribute('value')
        return {keyword_name: keyword_value}

if __name__ == '__main__':
    xml_file = xmldom.parse('xmlfile.xml')
    eles = xml_file.documentElement
    
    # 获取基础信息(保留原代码逻辑)
    defect = eles.getElementsByTagName('DefectID')[0].firstChild.data
    escalation = eles.getElementsByTagName('EscalationID')[0].firstChild.data
    title = eles.getElementsByTagName('Title')[0].firstChild.data
    
    # 解析KeywordList下的所有顶层Keyword
    keyword_list = eles.getElementsByTagName('KeywordList')[0]
    top_keywords = keyword_list.getElementsByTagName('Keyword')
    
    # 构建最终字典
    result = {}
    for kw in top_keywords:
        result.update(parse_keyword(kw))
    
    print(result)

代码说明

  • 递归遍历:parse_keyword函数检查当前<Keyword>是否包含子<Keyword>标签,若有则递归处理每个子标签,否则提取其Value(或小写value)属性值。
  • 层级保留:从KeywordList开始遍历顶层<Keyword>,再逐层递归子标签,完整保留XML中的父子结构。
  • 属性兼容:同时处理大写Value和小写value属性,避免因大小写差异导致取值失败。

输出结果(修正语法后的有效结构)

{
    'a1': {
        'a1001': {
            'a1001001': 'Keyword1001001',
            'a1001002': 'Keyword1001002'
        },
        'a1002': 'Keyword1002',
        'a1003': 'Keyword1003',
        'a1004': 'Keyword1004'
    },
    'a2': 'Keyword2',
    'a3': 'Keyword3',
    'a4': 'Keyword4'
}

注:你提供的期望输出存在语法错误(同一键对应多个字典值),上述输出为符合Python语法规范的正确层级结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:57:08