问题描述
我有许多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;
}
标签包围。
如果这不是您想要的行为,请指定所需的行为。