我正在尝试抓一个混合内容的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我会得到粗体文本的文本内容 - 这恰好是我不感兴趣的标题。
我确信有一点xpath魔法,这应该很容易,但到目前为止我还没找到它!或者,还有更好的方法?感激地收到任何评论。
答案 0 :(得分:4)
我尝试将
/text()
添加到表达式中,该表达式也不返回任何内容
这将选择 all 上下文节点的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....
"
答案 1 :(得分:3)
我相信以下xpath查询应该适合您的情况。跟随兄弟姐妹对你正在尝试做的事情有用。
//span[@id='span-id']/br/following-sibling::text()