XPath在标准匹配节点之后立即选择节点

时间:2013-11-22 23:41:12

标签: python xpath

我正在尝试使用XPATH从XHTML文件中提取数据,我有一个场景,我希望匹配一个TD元素,然后在它之后得到TD。

以下是HTML示例

  <tr> 
     <td colspan="3" style="border-top:1px solid rgb(234,234,234);padding:0pt 0pt 16px;width:560px">   </td> 
    </tr> 
    <tr> 
     <td colspan="2" style="font:12px/18px Arial,sans-serif;padding:0 10px 0 0;color:rgb(51,51,51);width:480px" align="right" valign="top"> Item Subtotal: </td> 
     <td style="font:12px/18px Arial,sans-serif;color:rgb(51,51,51);width:80px" align="right" valign="top"> $25.79 </td> 
    </tr> 
    <tr> 
     <td colspan="2" style="font:12px/18px Arial,sans-serif;padding:0 10px 0 0;color:rgb(51,51,51);width:480px" align="right" valign="top"> Shipping &amp; Handling: </td> 
     <td style="font:12px/18px Arial,sans-serif;color:rgb(51,51,51);width:80px" align="right" valign="top"> $0.00 </td> 
    </tr> 
    <tr> 
     <td colspan="2" style="font:12px/18px Arial,sans-serif;padding:0 10px 0 0;color:rgb(51,51,51);width:480px" align="right" valign="top"> Total Before Tax: </td> 
     <td style="font:12px/18px Arial,sans-serif;color:rgb(51,51,51);width:80px" align="right" valign="top"> $25.79 </td> 
    </tr> 
    <tr> 
     <td colspan="2" style="font:14px Arial,sans-serif;padding:10px 10px 10px 0;color:#333;width:480px" align="right" valign="top"> Shipment Total: </td> 
     <td style="color:#333;font:14px Arial,sans-serif;padding:10px 0 5px 0;color:#333;width:80px" align="right" valign="top"> <b> $25.79 </b> </td> 
    </tr> 

我要做的是,获取具有“Shipment Total”的TD元素,然后从TD元素后面提取该值。我设法使用XPATH选择元素,但无法找到跳转到下一个元素的方法

xhtml = etree.HTML(i.get('content').encode('utf8'))
result = etree.tostring(xhtml, pretty_print=True, method="html")
root = html.fromstring(result)
print root.xpath('//td[contains(text(), "Shipment Total:")]')

它更容易在BeautifulSoup中使用但受限于XPath,如果可能的话,任何人都可以提供帮助吗?

感谢

1 个答案:

答案 0 :(得分:1)

为了在您选择的TD之后立即获得TD,您可能对此XPath表达式感兴趣:

//td[contains(text(), "Shipment Total:")]/following-sibling::td