使用 XPath 解析文本电子邮件地址,而不是 //A[startswith(@href, 'mailto:')]

Gar*_*mel 3 ruby xpath nokogiri

我想从几个不同的网站提取电子邮件地址。如果它们是活动链接格式,我可以使用

//A[starts-with(@href, 'mailto:')]
Run Code Online (Sandbox Code Playgroud)

但其中一些只是文本格式example@domain.com,而不是链接,所以我想选择包含@在其中的元素的路径

Dim*_*hev 5

我想选择一个包含 @ 的元素的路径

使用

//*[contains(., '@')]
Run Code Online (Sandbox Code Playgroud)

在我看来,您真正想要的是选择具有包含“@”的文本节点子元素的元素。如果是这样,请使用:

//*[contains(text(), '@')]
Run Code Online (Sandbox Code Playgroud)

基于 XSLT 的验证:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:copy-of select=
        "//*[contains(text(), '@')] "/>
 </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

当此转换应用于以下 XML 文档时:

<html>
 <body>
  <a href="xxx.com">xxx.com</a>
  <span>someone@xxx.com</span>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

计算 XPath 表达式并将所选节点复制到输出

<span>someone@xxx.com</span>
Run Code Online (Sandbox Code Playgroud)