【问题标题】:Taking multiple elements from an XML file and converting them into styled element从 XML 文件中获取多个元素并将它们转换为样式元素
【发布时间】:2018-01-31 22:07:29
【问题描述】:

我是 python 的初学者(约 5 个月),我目前正在努力弄清楚如何解析被选中为 Yes 的比赛,将它们转换为代表比赛的字母,然后全部取走的字母并将它们附加到名为multi_race 的新节点。

我在想伪代码:

node = tree.findall('race_white')
for element in elements:
    element sub ('Yes', 'A')
    element write tree to xml

这是起始 XML:

<application>
    <lastname>lastname</lastname>
    <firstname>first</firstname>
    <middlename>middle</middlename>
    <sex>Male</sex>
    <BIRTH>01/01/1980</BIRTH>
    <hispanic_latino></hispanic_latino>
    <race_white>Yes</race_white>  #CodeA
    <race_black></race_black>     #CodeB
    <race_asian></race_asian>     #CodeC
    <race_american_indian></race_american_indian>  #CodeD
    <race_pacific_islander></race_pacific_islander> #CodeE

这是我想要的结果:

<application>
    <lastname>lastname</lastname>
    <firstname>first</firstname>
    <middlename>middle</middlename>
    <sex>Male</sex>  
    <BIRTH>01/01/1980</BIRTH>
    <hispanic_latino></hispanic_latino>
    <multi_race>A,</multi_race>

【问题讨论】:

    标签: python xml python-3.x csv


    【解决方案1】:

    您可以遍历应用程序的所有元素,并为每个带有比赛标签的元素保存要添加的相应字母。遍历所有标签后,您可以创建一个新元素,并将连接的字母作为标签。示例代码:(暂时未测试)

        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)   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多