如何在lxml中表示“当前节点”中有一个子节点

时间:2014-04-02 12:05:29

标签: python xml lxml

我想将html文件解析为:
    1)当td中有子模式时,请输出stage1
    2)当td中没有子模式时,请输出stage2

如何完成我的代码?

data='''
<table>
<tr>
<td>
<span>  hallo
</span>
</td>
</tr>
<tr>
<td>  hallo
</td>
</tr>
</table> '''
import lxml.html
root=lxml.html.document_fromstring(data)
set=root.xpath('//table//tr//td')
for cell in set:
    if(there is a child node in current node):
        print("stage1")
    else:
        print("stage2")

1 个答案:

答案 0 :(得分:1)

一种选择是使用getchildren()方法:

for cell in set:
    print "stage1" if cell.getchildren() else "stage2"

打印:

stage1
stage2

由于第一个td内有span,第二个td没有任何子女。

UPD:

for cell in set:
    children = cell.getchildren()
    if not children:
        print "stage2"
    else:
        print "stage1"
        for child in children:
            print child.xpath('node()')[0].strip()