2016-04-28 5 views
1

私はこのXMLを持っている:複数の "構成要素" とのpythonのfindAllのみ最初の出現

enter image description here

タグを。

import sys 
from xml.etree import ElementTree as et 

base="<ss><cod>cod1</cod><measure><m>1</m></measure><constituents><cod>const1</cod><measure><m>2</m></measure><constituents><cod>const1_1</cod><measure><m>3</m></measure><constituents><cod>const3</cod><measure><m>4</m></measure></constituents></constituents><constituents><cod>const1_2</cod><measure><m>3</m></measure><constituents><cod>const3</cod><measure><m>42</m></measure></constituents></constituents></constituents></ss>" 
tsString = et.fromstring(base) 
ss=tsString.getiterator('ss')  
for r in ss: 
    measure = risp.findall('.//constituents') #(1) get const1, const1_1, const3, const1_2, const3_2, only needed is const1 
    for c in measure: 
     measure1 = c.findall('.//constituents') #(2) get const1_1, const3, const1_2, const3_2, only needed are const1_1, const1_2 
     .... 

しかしfindallリターン成分のすべての発生を:私は、各レベルを反復する必要があります。 私は(1)findallは、 "const1"メジャーを返すだけで、(2)は "const1_1"と "const1_2"と "const3_2"と "const3_2"を返します。

2 findall ?

答えて

2

ただ、現在のノードに非再帰検索を実行する.//一部を省略:

for r in ss: 
    measure = r.findall('constituents') 
    for c in measure: 
     measure1 = c.findall('constituents') 
0

.//は、すべての子を取得します。ちょうど次のステップでそれらを取得してください。

import sys 
from xml.etree import ElementTree as et 

base="<ss><cod>cod1</cod><measure><m>1</m></measure><constituents><cod>const1</cod><measure><m>2</m></measure><constituents><cod>const1_1</cod><measure><m>3</m></measure><constituents><cod>const3</cod><measure><m>4</m></measure></constituents></constituents><constituents><cod>const1_2</cod><measure><m>3</m></measure><constituents><cod>const3</cod><measure><m>42</m></measure></constituents></constituents></constituents></ss>" 
tsString = et.fromstring(base) 
ss=tsString.getiterator('ss') 
for r in ss: 
    measure = r.findall('./constituents') #(1) get const1, const1_1, const3, const1_2, const3_2, only needed is const1 
    for t in measure: #for test 
      print t[0].text # for test 
    for c in measure: 
     measure1 = c.findall('./constituents') #(2) get const1_1, const3, const1_2, const3_2, only needed are const1_1, const1_2 
     for t in measure1: # for test 
      print t[0].text # for test 
関連する問題