如何选择包含电子邮件的最内层节点?

时间:2013-10-25 16:32:48

标签: xpath

来自此示例HTML

<html> 
  <title>Our site</title>  
  <body bgcolor="#333366" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> 
    <div id="Layer2" style="position:absolute; width:106px; height:134px; z-index:2; left: 20px; top: 340px;" class="info">info@systems.ca</div> 
  </body> 
</html>

我想使用XPATH来获取包含电子邮件的最内层节点

我试过了:

  

/ * [含有(。, '@')]

但它选择了'HTML'节点。节点的名称应该是任何东西(我知道'@'是一个非常周的选择,但我会使用正则表达式来确保节点包含电子邮件)。

修改

在这种情况下,我想要'DIV'

2 个答案:

答案 0 :(得分:2)

可能效率不高,但请尝试:

//*[contains(.,'@') and not(descendant::*[contains(.,'@')])]

(//*[contains(.,'@')])[last()]

答案 1 :(得分:2)

您可以通过选择文本节点而不是*,然后获取其父节点来完成此操作。 XPath表达式为:

//text()[contains(.,'@')]/..

这将返回包含文本节点的标签集合,其中至少有一个文本节点具有电子邮件地址。