我正在尝试使用ElementTree来解析xml文件。给定下面的xml,我需要向文件中写入'chain_id‘(在标题’m‘下)和'name’(在标题‘r’下),但前提是满足以下条件: 1.)“‘css”(在标题“i”下)不是-0和2。)‘'bsa’>0
当满足第二个条件时,我可以跟踪“名称”:
for r in root.iter('r'):
name = r.find('name').text
bsa = r.find('bsa').text
if eval(bsa) > 0:
print name
但我最终得到了很多我不需要的名字,因为我不知道如何根据第一个条件来实现这一点。我已经研究过Xpath,但我在实现它时遇到了困难。
总而言之,我只对'm‘的子代和曾孙感兴趣,如果'm’('css')的兄弟有一定的值。
xml文件相当大,有> 20‘i,每个'i’至少有两个'm‘,每个’m‘有>100’r。
我更喜欢用标准的python方法(而不是lxml或漂亮的石汤)来做这件事。
<pi>
<pe>
<ni>20</ni>
<i>
<id>1</id>
<css>-0</css>
<m>
<id>1</id>
<chain_id>B</chain_id>
<int_nres>19</int_nres>
<rs>
<r>
<ser_no>1</ser_no>
<name>MET</name>
<seq_num>0</seq_num>
<asa>157.15526405</asa>
<bsa>0</bsa>
</r>
<r>
.
.
.
</r>
<m>
.
.
.
</m>
</i>
<i>
.
.
.
</i>
</pe>
</pi>
发布于 2013-03-27 18:30:42
myxml=ET.parse('path_to_yourxml')
for elem in myxml.getroot().findall('pi/pe/i'):
if elem.find('css').text!='-0':
for elem1 in elem.findall('m'):
if eval(elem1.find('rs/r/bsa').text)>0:
print elem1.find('rs/r/name').text
https://stackoverflow.com/questions/15666315
复制相似问题