lxml/Python:获取上一个同级 [英] lxml/Python : get previous-sibling

查看:110
本文介绍了lxml/Python:获取上一个同级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下html:

<div id = "big">
    <span>header 1</span>
    <ul id = "outer">
        <li id = "inner">aaa</li>
        <li id = "inner">bbb</li>
    </ul>

    <span>header 2</span>
    <ul id = "outer">
        <li id = "inner">ccc</li>
        <li id = "inner">ddd</li>
    </ul>
</div>

我希望它按以下顺序循环播放:

I want it to loop it in the order:

header 1
aaa
bbb
header 2
ccc
ddd

我尝试遍历每个ul,然后打印标题和li值.但是,我不知道如何获取与ul相关的span标头.

I have tried looping through each ul and then printing the header and the li values. However, I don't know how to get the span header that is associated with a ul.

sets = tree.xpath("//div[@id='big']//ul[@id='outer']")

for set in sets:

    # Print header. Not sure how to get it
    header = set.xpath(".//li/preceding-sibling::span")
    print header 

    # Print texts. This works.
    values = set.xpath(".//li//text()")
    for v in values:
        print v 

仅循环所有文本节点是行不通的,因为我需要知道它是标题还是li值.

Just looping all text nodes won't work because I need to know if it is a header or li value.

推荐答案

此方法有效:

header = ingred_set.getprevious().xpath(".//text()")[0]

这篇关于lxml/Python:获取上一个同级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆