从含深层键值的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("------------------------")
关键说明
- 节点遍历逻辑:
xmltodict会把XML中数字命名的子节点解析为字典的键(如'0'、'1'),直接遍历字典键即可处理所有子节点。 - 字段提取容错:使用
dict.get()方法代替直接索引,避免因节点缺失导致的报错,同时设置默认值。 - 文本适配:如果你的
mat_formattedtext节点直接存储文本而非嵌套结构,可简化为current_node.get('mat_formattedtext', '无文本内容')。 - 过滤需求:若只需提取特定题型(如仅
Multiple Choice),可添加判断逻辑:if question_type == 'Multiple Choice': # 执行后续处理 - 输出扩展:若需要将结果保存为结构化文件(如CSV),可结合
csv模块实现批量写入。
内容的提问来源于stack exchange,提问作者Shiva
相关产品推荐
相关产品推荐

