XML转JSON:解决<P>内容成列表、挪威语转义及合并单行问题
解决XML转JSON时合并
标签内容并保留挪威语特殊字符的问题
我来帮你搞定这两个痛点——把分散的
标签内容合并成单行,同时让挪威语特殊字符正常显示。修改后的代码如下,我会逐一解释关键改动:
import xmltodict import os import json path = r"C:\Users\ujorbjo00\Documents\xmltodict test" for filename in os.listdir(path): if not filename.endswith('.xml'): continue fullname = os.path.join(path, filename) with open(fullname, 'r', encoding='utf_8') as f: xmlString = f.read() # 解析XML为字典,保留命名空间和属性 data = xmltodict.parse(xmlString, encoding='utf-8', process_namespaces=True, xml_attribs=True) try: # 定位到目标嵌套路径 target_node = data['DOFFIN_ESENDERS']['FORM_SECTION']['CONTRACT']['FD_CONTRACT']['OBJECT_CONTRACT_INFORMATION']['QUANTITY_SCOPE']['NATURE_QUANTITY_SCOPE']['TOTAL_QUANTITY_OR_SCOPE'] # 处理<P>标签:可能是单个字典或数组 p_items = target_node.get('P', []) # 如果是单个<P>元素,转成列表统一处理 if isinstance(p_items, dict): p_texts = [p_items['#text']] else: p_texts = [item['#text'] for item in p_items] # 合并所有<P>内容为单行(可根据需求换成'\n'换行) merged_text = ' '.join(p_texts) # 替换原节点为合并后的文本 data['DOFFIN_ESENDERS']['FORM_SECTION']['CONTRACT']['FD_CONTRACT']['OBJECT_CONTRACT_INFORMATION']['QUANTITY_SCOPE']['NATURE_QUANTITY_SCOPE']['TOTAL_QUANTITY_OR_SCOPE'] = merged_text except KeyError: # 处理部分XML文件缺少目标路径的情况,可根据需要调整 print(f"提示:文件 {filename} 中未找到目标嵌套路径,跳过处理") # 生成JSON时关闭ASCII转义,保留特殊字符,可选indent参数美化格式 jsonString = json.dumps(data, ensure_ascii=False, indent=2) with open(fullname[:-4] + ".json", 'w', encoding='utf_8') as f: f.write(jsonString)
关键改动说明:
- 合并
标签内容:
解析XML后,我们沿着你指定的嵌套路径找到TOTAL_QUANTITY_OR_SCOPE节点,判断是单个元素还是数组,提取每个
的文本内容后用空格连接成单行。添加
try-except是为了避免某些XML文件缺少该路径导致程序崩溃,你可以根据实际情况调整错误处理逻辑(比如记录日志)。 - 保留挪威语特殊字符:
在json.dumps()中加入ensure_ascii=False参数,这样JSON输出会直接保留UTF-8编码的特殊字符(如følgende中的ø),而不会被转义成\u00f8这类Unicode序列。 - 可选格式化:
添加indent=2让生成的JSON文件更易读,方便你检查转换结果,如果不需要格式化可以移除这个参数,让JSON更紧凑。
这样处理后的JSON文件就能完美适配OpenRefine或Pandas DataFrame的导入需求了。
内容的提问来源于stack exchange,提问作者Bjørn Jørgensen
相关产品推荐
相关产品推荐

