ElementTree を使用して xml ファイルを解析しようとしています。以下の xml を考えると、'chain_id' (見出し 'm' の下) と 'name' (見出し 'r' の下) をファイルに書き込む必要がありますが、次の基準が満たされている場合のみ: 1.) 'css' (見出し 'i' の下) は -0 ではなく、2.) 'bsa' > 0
2 番目の基準が満たされると、「名前」を追跡できます。
for r in root.iter('r'):
name = r.find('name').text
bsa = r.find('bsa').text
if eval(bsa) > 0:
print name
しかし、最初の基準でこれを条件付きにする方法がわからないため、必要のない多くの名前を取得することになります。Xpath を調べましたが、実装に苦労しています。
要約すると、'm' の兄弟 ('css') が特定の値を持っている場合にのみ、'm' の子とひ孫に関心があります。
xml ファイルはかなり大きく、20 個を超える 'i'、各 'i' に対して少なくとも 2 つの '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>