python findall 仅第一次出现
python findall only first occurence
我知道了 xml:
带有多个 "constituents" 标签。我需要遍历每个级别:
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
return 成分的每一次出现。
我只需要 (1) findall return "const1" 测量,(2) 只需要 return "const1_1" 和 "const1_2" 和 (3) "const3" , "const3_2"
如何修复 2 findall?
只需省略.//
部分即可在当前节点执行非递归搜索:
for r in ss:
measure = r.findall('constituents')
for c in measure:
measure1 = c.findall('constituents')
.//
获取所有子项。只需获取下一个 "step" 中的那些。
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
我知道了 xml:
带有多个 "constituents" 标签。我需要遍历每个级别:
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
return 成分的每一次出现。
我只需要 (1) findall return "const1" 测量,(2) 只需要 return "const1_1" 和 "const1_2" 和 (3) "const3" , "const3_2"
如何修复 2 findall?
只需省略.//
部分即可在当前节点执行非递归搜索:
for r in ss:
measure = r.findall('constituents')
for c in measure:
measure1 = c.findall('constituents')
.//
获取所有子项。只需获取下一个 "step" 中的那些。
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