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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:02:37