我对Python不是很熟悉,我需要您帮助解决我需要在CSV文件中导出的XML文件示例:
<FORMAT_TITRE_3>2-2 - Texte en application duquel la convention est conclue :</FORMAT_TITRE_3> La procédure de délégation [...]territoriales.
<FORMAT_TITRE_3>2-3 - Objet de la délégation :</FORMAT_TITRE_3>
<TR /> Convention de délégation [...]Fussy.
<TR /> Domaine de la délégation : assainissement collectif
<TR /> Durée de la délégation : xx ans.
<TR /> Lieu principal d'exécution de la délégation : Territoire communal de Fussy.
<TR /> Code Nuts : FR241
<FORMAT_TITRE_3>2-4 - Information sur le montant [...] origine) :</FORMAT_TITRE_3> The contract amounts to : xxx E HT.
<FORMAT_TITRE_3>2-5 - Classification CPV :</FORMAT_TITRE_3> 90110000-1.
<FORMAT_TITRE_3>3 - Procédure :</FORMAT_TITRE_3>
当使用ElementTree方法时,我能够提取结束标记后显示的文本(例如,第1行的“Laprocédurededélégation[...] territoriales。”)以及<TR />
之后的文本标签。
文件的其余部分有一个经典的结构,所以我的代码工作得很好,但我现在坚持使用那些奇怪的标签。下面是我的代码示例:
# takes as input an xml root, a dictionary where to store the parsed values and an id number suggesting uniqueness of the current node
def parse_node(root, dict, id):
# Parse this node
tag_dict = OrderedDict()
for key, value in root.attrib.items():
if id > 1: # if there are more than one childs with the same tag
tag_dict[root.tag + str(id) + ':' + key] = value
else:
tag_dict[root.tag + ':' + key] = value
# Get children of node
children = root.getchildren()
# If node has one or more child
if len(children) >= 1:
# Loop through all the children
tag_dict_id = defaultdict(lambda: 0)
for child in children:
tag_dict_id[child.tag] += 1 # keep track of the children
# call to recursion function
# Parse children
parse_node(child, tag_dict, tag_dict_id[child.tag])
# If does not have children and is the 'search_node'
elif len(children) == 0:
# Store the text inside the node.
if id > 1:
tag_dict[root.tag + str(id) + ':text'] = root.text
else:
tag_dict[root.tag + ':text'] = root.text
# update the current dictionary with the new data
dict.update(tag_dict)
return dict
非常感谢您的帮助!