如何使其中的子元素中(Python的元素树)加入了一个列表

问题描述:

如何使其中的子元素中(Python的元素树)加入了一个列表

<pathway> 
    <relation entry1="62" entry2="64" type="PPrel"> 
     <subtype name="activation" value="--&gt;"/> 
    </relation> 
    <relation entry1="54" entry2="55" type="PPrel"> 
     <subtype name="activation" value="--&gt;"/> 
     <subtype name="phosphorylation" value="+p"/> 
    </relation> 
    <relation entry1="55" entry2="82" type="PPrel"> 
     <subtype name="activation" value="--&gt;"/> 
     <subtype name="phosphorylation" value="+p"/> 
    </relation> 
</pathway> 

我想亚型到一个列表进行排序此示例XML代码,但如果该项目有多个亚型,将它们组合成一个字符串

示例输出: ['activation','activation;磷酸化“,”活化;磷酸化 ']

我当前的代码是

tree= ET.parse('file.xml') 
root= tree.getroot() 
relation = [] 
for son in root: 
    for step_son in son: 
     if len(son.getchildren()) > 1: 
      relation.append(step_son.get('name')) 
     if len(son.getchildren()) < 2: 
      relation.append(step_son.get('name')) 

和我的关系输出是:

[' 激活 ' '激活', '磷酸化', '激活',磷酸化']

任何帮助将是惊人的,谢谢!

使用查找并遍历每个匹配的元素:

In [35]: from xml.etree import ElementTree 
In [36]: xml_string = """ 
    ...: <pathway> 
    ...:  <relation entry1="62" entry2="64" type="PPrel"> 
    ...:   <subtype name="activation" value="--&gt;"/> 
    ...:  </relation> 
    ...:  <relation entry1="54" entry2="55" type="PPrel"> 
    ...:   <subtype name="activation" value="--&gt;"/> 
    ...:   <subtype name="phosphorylation" value="+p"/> 
    ...:  </relation> 
    ...:  <relation entry1="55" entry2="82" type="PPrel"> 
    ...:   <subtype name="activation" value="--&gt;"/> 
    ...:   <subtype name="phosphorylation" value="+p"/> 
    ...:  </relation> 
    ...: </pathway>""" 

In [37]: p_element = ElementTree.fromstring(xml_string) 

In [38]: result = [] 

In [39]: for relation in p_element.findall('.//relation'): 
    ...: result.append(';'.join(x.attrib['name'] for x in relation.findall('.//subtype'))) 
    ...: 

In [40]: result 
Out[40]: ['activation', 'activation;phosphorylation', 'activation;phosphorylation'] 
+0

太感谢你了,我感谢您的帮助。 – zeuscortes