lxml:如何只对第一个/第二个兄弟姐妹进行迭代?

时间:2014-02-05 11:16:02

标签: python iteration lxml siblings

我有一个这样的html文档:

<html>
 <head></head>
 <body>
   <p>
     <dfn>text</dfn>sometext
     **<i>othertext</i>**
     <i>...</i>
     <i>...</i></p>
   <p>
     <dfn>text</dfn>sometext
     **<i>othertext</i>**
     <i>...</i>
     <i>...</i></p>
  </body>
 </html>

我需要解析它以便我可以从每个第一个i-tag内部获取文本,并且关于dfn的文本(我将最终提取dfn-text) 目前我这个代码:

tree = etree.parse(filename)
for dfn in tree.iter('dfn'):
   bu = dfn.text
   for sibling in dfn.itersiblings():   
            su = sibling.text
            if su != None and bu != None and re.findall(..,su):
                places.append(bu)

这会遍历每个i-tag,有时会给我错误的输出。如何将迭代限制为只有dfn的第一个兄弟姐妹?

1 个答案:

答案 0 :(得分:0)

找到匹配后突破itersiblings()循环:

for dfn in tree.iter('dfn'):
    bu = dfn.text
    for sibling in dfn.itersiblings():   
        su = sibling.text
        if su != None and bu != None and re.findall(..,su):
            places.append(bu)
            break

break语句提前结束for sibling循环,不再处理任何兄弟姐妹。相反,外部for dfn循环继续使用下一个dfn元素。