我是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>
答案 0 :(得分:0)
您可以遍历应用程序的所有元素,并且对于带有种族标记的每个元素,您可以保存要添加的相应字母。迭代完所有标记后,您可以创建一个新元素,并将标记作为连接字母。示例代码:(现在未经测试)
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)