使用Python解析没有结束标记的XML文件

时间:2016-01-08 09:47:23

标签: python xml

我对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

非常感谢您的帮助!

0 个答案:

没有答案