用XPath查找具有最高价值的元素?

时间:2019-07-02 20:04:06

标签: selenium-webdriver xpath

<div class="box box-0 box-hover-null">10828</div>

我在html文档中有一系列这样的文件,变量号为text()。

我需要找到文本值最高和最低的第一个div。

我当前的选择器:

//div[string-length(text()) > 0 and contains(concat(' ',normalize-space(@class),' '),' box-0 ')]

2 个答案:

答案 0 :(得分:1)

<div class="box box-0 box-hover-null">10828</div>
     

我在html文档中有一系列这些,变量号为   text()。

     

我需要找到文本值最高和最低的第一个div。

据我所知,Selenium使用各自浏览器的XPath引擎-当前所有浏览器仅支持XPath 1.0。

因此,所需的是一个XPath 1.0表达式,该表达式选择第一个<div>元素,其字符串值可转换为数字,并且该数字是所有此类<div>数值中的最小值。

需要类似的XPath表达式,但该表达式将选择第一个具有最大数值的<div>元素。

以下是两个这样的XPath表达式,它们选择了所需的<div>元素:

具有最小数值的第一个<div>元素

(//div[number(.) = number(.)
     and number(.) = //div[number(.) = number(.)
                         and not(number(.) > //div[number(.) = number(.)]/text())
                          ]
      ]
)[1]

具有最大数值的第一个<div>元素

(//div[number(.) = number(.)
     and number(.) = //div[number(.) = number(.)
                         and not(number(.) < //div[number(.) = number(.)]/text())
                          ]
      ]
)[1]

这是基于XSLT 1.0的验证。下面的转换针对一个XML文档评估这两个XPath表达式,并将该评估的结果(选定的节点)复制到输出中:

<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="/">
    First node with Minimum value: <xsl:copy-of select=
    "(//div[number(.) = number(.)
    and number(.) = //div[number(.) = number(.)
                        and not(number(.) > //div[number(.) = number(.)]/text())
                         ]
           ]
      )[1]"/>

=======================

    First node with Maximum value: <xsl:copy-of select=
    "(//div[number(.) = number(.)
    and number(.) = //div[number(.) = number(.)
                        and not(number(.) &lt; //div[number(.) = number(.)]/text())
                         ]
           ]
      )[1]"/>
  </xsl:template>
</xsl:stylesheet>

在此XML文档上应用此转换时

<html>
  <div class="box box-0 box-hover-null">100</div>
  <div class="box box-1 box-hover-null">100</div>
  <div class="box box-2 box-hover-null">0500</div>
  <div class="box box-3 box-hover-null">00500</div>
  <div class="box box-4 box-hover-null">300</div>
  <div class="box box-5 box-hover-null">200</div>
</html>

产生了所需的正确结果

    First node with Minimum value: <div class="box box-0 box-hover-null">100</div>

=======================

    First node with Maximum value: <div class="box box-2 box-hover-null">0500</div>

答案 1 :(得分:0)

获得最大价值

max(//div[@class='box box-0 box-hover-null'])

您可以使用

获取元素
(//div[.=max(//div[@class='box box-0 box-hover-null'])][[@class='box box-0 box-hover-null'])[1]

获取最小值

min(//div[@class='box box-0 box-hover-null'])

您可以使用来获取元素

(//div[.=min(//div[@class='box box-0 box-hover-null'])][[@class='box box-0 box-hover-null'])[1]