XML至JSON <P>最终列为列表

问题描述

我有许多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 fil看起来像

"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,erosjonssikring","\u2022\tForskalings-,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_@R_452_4045@ION - QUANTITY_ScopE - NATURE_QUANTITY_ScopE - TOTAL_QUANTITY_OR_ScopE

_ - DOFFIN_ESENDERS - FORM_SECTION - CONTRACT - FD_CONTRACT - OBJECT_CONTRACT_@R_452_4045@ION - QUANTITY_ScopE - NATURE_QUANTITY_ScopE - TOTAL_QUANTITY_OR_ScopE - P

_ - DOFFIN_ESENDERS - FORM_SECTION - CONTRACT - FD_CONTRACT - OBJECT_CONTRACT_@R_452_4045@ION - QUANTITY_ScopE - NATURE_QUANTITY_ScopE - TOTAL_QUANTITY_OR_ScopE - P – P

我很好地把所有

放在一行中

解决方法

我不确定我是否能理解您所提问题的全部内容,但是对于挪威字符问题,您可以查看this post

关于将XML转换为JSON的列表,这是可以预期的。在转换中,XML标签将转换为JSON字典键,并且字典中的键与XML中的标签不同,它们是唯一的,因此,同一标签下的所有内容都将转储到同一键下。它也应该以其他方式工作-考虑HTML列表:每个列表元素都被相同的 private Flux<VMachineResourceResponse> getDataForPhysicalMachineProtection( ResourcesWrapper resources,UUID groupId) { Flux<VMachineResourceResponse> result = Flux.empty(); resources .getHypervResources() .forEach( resource -> { Flux<VMachineResourceResponse> protectedResourcesForAgentAndId = hypervAgentService.getProtectedResourcesForAgentAndId( groupId,resource.getAgentId()); result.mergeWith(protectedResourcesForAgentAndId); //maybe that way??? }); return result; } 标签包围。

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