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

从含深层键值的XML文件中提取指定节点值的技术问询

处理方案

基于你现有的xmltodict代码,后续可以通过遍历item节点下的数字键子节点,直接提取目标字段,以下是具体实现:

完整代码示例

import xmltodict

with open("C:/Users/SS/Desktop/moodlexml/00001_questions.dat") as fd:
    doc = xmltodict.parse(fd.read())

# 定位到item节点层级
item_node = doc['questestinterop']['assessment']['section']['item']

# 遍历所有数字命名的子节点
for node_key in item_node:
    # 过滤非数字命名的节点(可选,根据实际XML结构调整)
    if node_key.isdigit():
        current_node = item_node[node_key]
        # 提取题型字段,默认值为"未知题型"避免键不存在报错
        question_type = current_node.get('bbmds_questiontype', '未知题型')
        # 提取格式化文本,适配xmltodict可能的嵌套结构(文本存于#text字段)
        formatted_text = current_node.get('mat_formattedtext', {}).get('#text', '无文本内容')
        
        # 按自定义格式输出,此处为打印示例,可替换为写入文件/生成CSV等
        print(f"【题型】: {question_type}")
        print(f"【内容】: {formatted_text}")
        print("------------------------")

关键说明

  1. 节点遍历逻辑:xmltodict会把XML中数字命名的子节点解析为字典的键(如'0'、'1'),直接遍历字典键即可处理所有子节点。
  2. 字段提取容错:使用dict.get()方法代替直接索引,避免因节点缺失导致的报错,同时设置默认值。
  3. 文本适配:如果你的mat_formattedtext节点直接存储文本而非嵌套结构,可简化为current_node.get('mat_formattedtext', '无文本内容')。
  4. 过滤需求:若只需提取特定题型(如仅Multiple Choice),可添加判断逻辑:
    if question_type == 'Multiple Choice':
        # 执行后续处理
    
  5. 输出扩展:若需要将结果保存为结构化文件(如CSV),可结合csv模块实现批量写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:15:37