首页 > 解决方案 > XML 转 JSON

最终成为列表

问题描述

我有许多 xml 文件,我会将它们转换为 JSON,然后将其加载到 openRefine 或 pandas 数据框中进行分析。xml文件看起来像

                <NATURE_QUANTITY_SCOPE>
                    <TOTAL_QUANTITY_OR_SCOPE>
                        <P>Entreprisens omfang:</P>
                        <P>Arbeidet omfatter bl.a følgende:</P>
                        <P>•    Ramming av stålrør</P>
                        <P>•    Løsmassearbeider, graving over og under vann, erosjonssikring</P>
                        <P>•    Forskalings-, armerings, og betongarbeider i stålrørspeler, kaipir og bru</P>
                        <P>•    Elektroarbeider </P>
                        <P>Arbeidet består bl.a av levering og montering av:</P>
                        <P>•    aggregathus</P>
                        <P>•    pullere og T-pullere</P>
                        <P>•    lodd til redningsleider</P>
                        <P>•    dumperdekk</P>
                        <P>•    aggregat og sylindere</P>
                        <P>•    sperrebom</P>
                        <P>Videre består arbeidet bl.a av mottak og montering av: </P>
                        <P>•    brulager inkl. fester til landkar, fendring     </P>
                        <P>•    heisetårn </P>
                        <P>•    sikringsbjelke</P>
                        <P>•    horisontale stålrør</P>
                        <P>•    komplette fenderpanel med innstøpingsgods/kjetting/gummifendere etc.</P>
                        <P>•    innstøpingsgods for dumperdekk</P>
                        <P>•    innstøpingsgods for overgangsplate</P>
                        <P>•    innstøpingsgods for horisontale stålrør</P>
                        <P>•    alle bolter for innstøpingsgods/vemohylser/skruer etc.</P>
                        <P>•    redningsleider</P>
                        <P>•    rekkverk og port kai</P>
                        <P>•    fotlist kai</P>
                    </TOTAL_QUANTITY_OR_SCOPE>
                </NATURE_QUANTITY_SCOPE>

我试过这段代码

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()

    jsonString = json.dumps(xmltodict.parse(xmlString, encoding='utf-8',process_namespaces=True, xml_attribs=True))

    with open(fullname[:-4] + ".json", 'w', encoding='utf_8') as f:
        f.write(jsonString)

但 JSON 文件看起来像

"NATURE_QUANTITY_SCOPE": {
                        "TOTAL_QUANTITY_OR_SCOPE": {
                            "P": ["Entreprisens omfang:", "Arbeidet omfatter bl.a f\u00f8lgende:", "\u2022\tRamming av st\u00e5lr\u00f8r", "\u2022\tL\u00f8smassearbeider, graving over og under vann, erosjonssikring", "\u2022\tForskalings-, armerings, og betongarbeider i st\u00e5lr\u00f8rspeler, kaipir og bru", "\u2022\tElektroarbeider", "Arbeidet best\u00e5r bl.a av levering og montering av:", "\u2022\taggregathus", "\u2022\tpullere og T-pullere", "\u2022\tlodd til redningsleider", "\u2022\tdumperdekk", "\u2022\taggregat og sylindere", "\u2022\tsperrebom", "Videre best\u00e5r arbeidet bl.a av mottak og montering av:", "\u2022\tbrulager inkl. fester til landkar, fendring", "\u2022\theiset\u00e5rn", "\u2022\tsikringsbjelke", "\u2022\thorisontale st\u00e5lr\u00f8r", "\u2022\tkomplette fenderpanel med innst\u00f8pingsgods/kjetting/gummifendere etc.", "\u2022\tinnst\u00f8pingsgods for dumperdekk", "\u2022\tinnst\u00f8pingsgods for overgangsplate", "\u2022\tinnst\u00f8pingsgods for horisontale st\u00e5lr\u00f8r", "\u2022\talle bolter for innst\u00f8pingsgods/vemohylser/skruer etc.", "\u2022\tredningsleider", "\u2022\trekkverk og port kai", "\u2022\tfotlist kai"]
                        }

这是 26 行,没有挪威字符的编码!

_ - DOFFIN_ESENDERS - FORM_SECTION - CONTRACT - FD_CONTRACT - OBJECT_CONTRACT_INFORMATION - QUANTITY_SCOPE - NATURE_QUANTITY_SCOPE - TOTAL_QUANTITY_OR_SCOPE

_ - DOFFIN_ESENDERS - FORM_SECTION - CONTRACT - FD_CONTRACT - OBJECT_CONTRACT_INFORMATION - QUANTITY_SCOPE - NATURE_QUANTITY_SCOPE - TOTAL_QUANTITY_OR_SCOPE - P

_ - DOFFIN_ESENDERS - FORM_SECTION - CONTRACT - FD_CONTRACT - OBJECT_CONTRACT_INFORMATION - QUANTITY_SCOPE - NATURE_QUANTITY_SCOPE - TOTAL_QUANTITY_OR_SCOPE - P – P

我拥有一切

在一排

标签: jsonpython-3.xxmlxml-parsingxmltodict

解决方案


我不确定我是否理解您问题中的所有内容,但对于挪威字符问题,您可以查看这篇文章

至于 XML 到 JSON 转换成列表,这是意料之中的。在转换中,XML 标签被转换为 JSON 字典键,并且字典中的键与 XML 中的标签不同,是唯一的,因此同一标签下的所有内容都被转储在同一键下。它也应该反过来工作——想想一个 HTML 列表:每个列表元素都被同一个<li>标签包围。

如果这不是您想要的行为,请指定所需的行为。


推荐阅读