2016-04-28 97 views
1

我有了這個XML:蟒蛇的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」和(3)「const3」,「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