简体   繁体   English

python findall仅第一次出现

[英]python findall only first occurence

I've got this xml: 我有这个xml:

在此处输入图片说明

with multiple "constituents" tag. 带有多个“成分”标签。 I need to iterate over each level: 我需要遍历每个级别:

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
        ....

But findall returns every occurence of constituents. 但是findall返回每次出现的成分。 I need the (1) findall only return "const1" measure's, the (2) only return "const1_1" and "const1_2" and (3) "const3", "const3_2" 我需要(1)findall仅返回“ const1”度量值,(2)仅返回“ const1_1”和“ const1_2”,以及(3)“ const3”,“ const3_2”

How can I fix the 2 findall? 如何修复2 findall?

Just omit the .// part to perform a non-recursive search in a current node: 只需省略.//部分即可在当前节点中执行非递归搜索:

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

.// gets all the children. .//所有的孩子。 Just get the ones in next "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 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM