Python 从XML文件中获取多个元素并将其转换为样式化元素

Python 从XML文件中获取多个元素并将其转换为样式化元素,python,xml,python-3.x,csv,Python,Xml,Python 3.x,Csv,我是python的初学者(~5个月),目前正在努力弄清楚如何解析被检查为Yes的种族,将它们转换为代表种族的字母,然后获取所有字母并将它们附加到名为multi_race的新节点 我想到了伪代码: node=tree.findall('race\u white') 对于元素中的元素: 子元素(“是”、“A”) 元素将树写入xml 以下是起始XML: 姓氏 第一 中间的 男性 01/01/1980 是的#代码a #法典 #编解码器 #编码 #编码员 以下是我想要的最终结果: 姓氏 第一 中间

我是python的初学者(~5个月),目前正在努力弄清楚如何解析被检查为
Yes
的种族,将它们转换为代表种族的字母,然后获取所有字母并将它们附加到名为
multi_race
的新节点

我想到了伪代码:

node=tree.findall('race\u white')
对于元素中的元素:
子元素(“是”、“A”)
元素将树写入xml
以下是起始XML:


姓氏
第一
中间的
男性
01/01/1980
是的#代码a
#法典
#编解码器
#编码
#编码员
以下是我想要的最终结果:


姓氏
第一
中间的
男性
01/01/1980
A.

您可以迭代应用程序的所有元素,对于带有种族标记的每个元素,保存要添加的对应字母。遍历所有标记后,可以创建一个新元素,将连接的字母作为标记。示例代码:(目前尚未测试)

    race_to_letter_map = {
        'race_white': 'A',
        'race_black': 'B'
        # add more races
    }

    applications = tree.findall('application')
    for application in applications:
        races = []
        elements_to_delete = []
        for xml_element in application:  # iterate over all elements of application
            # check whether the current child indicates one of the races
            race_letter = race_to_letter_map.get(xml_element.tag, None)
            if race_letter is not None:
                elements_to_delete.append(xml_element)
                if xml_element.text == 'Yes':
                    races.append(race_letter)

        # removing the now unwanted tags
        for xml_element in elements_to_delete:
            application.remove(xml_element)

        # creating the resulting element and append it to application
        multi_race_element = Element('multi_race')
        multi_race_element.text = ",".join(races)
        application.append(multi_race_element)