硒xpath刮混合内容html跨度

前端之家收集整理的这篇文章主要介绍了硒xpath刮混合内容html跨度前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试刮掉混合内容的span元素
  1. <span id="span-id">
  2. <!--starts with some whitespace-->
  3. <b>bold title</b>
  4. <br/>
  5. text here that I want to grab....
  6. </span>

这是一个标识跨度的抓取代码片段.它没有问题,但是webelement的文本字段是空白的.

  1. IWebDriver driver = new FirefoxDriver();
  2. driver.Navigate().GoToUrl("http://page-to-examine.com");
  3. var query = driver.FindElement(By.XPath("//span[@id='span-id']"));

我已经尝试将/ text()添加到表达式中,该表达式也不返回任何内容.如果我添加/ b我会得到粗体文本的文本内容 – 这恰好是我不感兴趣的标题.

我确信有一点xpath魔法,这应该很容易,但到目前为止我还没找到它!或者,还有更好的方法?感激地收到任何评论.

解决方法

I’ve tried adding /text() to the expression which also returns nothing

这将选择上下文节点的所有text-node-children,并且其中有三个.

你所谓的“无”是最可能的第一个,这是一个只有空格的文本节点(因此你看到它中的“无”).

你需要的是:

  1. //span[@id='span-id']/text()[3]

当然,还有其他可能的变化:

  1. //span[@id='span-id']/text()[last()]

要么:

  1. //span[@id='span-id']/br/following-sibling::text()[1]

基于XSLT的验证:

  1. <xsl:stylesheet version="1.0"
  2. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:output omit-xml-declaration="yes" indent="yes"/>
  4.  
  5. <xsl:template match="node()|@*">
  6. "<xsl:copy-of select="//span[@id='span-id']/text()[3]"/>"
  7. </xsl:template>
  8.  
  9. </xsl:stylesheet>

此转换只是输出XPath表达式选择的任何内容.应用于提供的XML文档时(注释已删除):

  1. <span id="span-id">
  2. <b>bold title</b>
  3. <br/>
  4. text here that I want to grab....
  5. </span>

产生了想要的结果:

  1. "
  2. text here that I want to grab....
  3. "

猜你在找的HTML相关文章