我正在尝试刮掉混合内容的span元素
<span id="span-id"> <!--starts with some whitespace--> <b>bold title</b> <br/> text here that I want to grab.... </span>
这是一个标识跨度的抓取代码片段.它没有问题,但是webelement的文本字段是空白的.
IWebDriver driver = new FirefoxDriver(); driver.Navigate().GoToUrl("http://page-to-examine.com"); var query = driver.FindElement(By.XPath("//span[@id='span-id']"));
我已经尝试将/ text()添加到表达式中,该表达式也不返回任何内容.如果我添加/ b我会得到粗体文本的文本内容 – 这恰好是我不感兴趣的标题.
解决方法
I’ve tried adding
/text()
to the expression which also returns nothing
这将选择上下文节点的所有text-node-children,并且其中有三个.
你所谓的“无”是最可能的第一个,这是一个只有空格的文本节点(因此你看到它中的“无”).
你需要的是:
//span[@id='span-id']/text()[3]
当然,还有其他可能的变化:
//span[@id='span-id']/text()[last()]
要么:
//span[@id='span-id']/br/following-sibling::text()[1]
基于XSLT的验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="node()|@*"> "<xsl:copy-of select="//span[@id='span-id']/text()[3]"/>" </xsl:template> </xsl:stylesheet>
此转换只是输出XPath表达式选择的任何内容.应用于提供的XML文档时(注释已删除):
<span id="span-id"> <b>bold title</b> <br/> text here that I want to grab.... </span>
产生了想要的结果:
" text here that I want to grab.... "