Html XPath$x()函数返回数组,即使指定了索引

Html XPath$x()函数返回数组,即使指定了索引,html,css,xml,xpath,web-scraping,Html,Css,Xml,Xpath,Web Scraping,我正在尝试选择包含按月选择表的div标记 ... <div class="month-table"> <div class="month-table_row"> <div class="month-table_col">Jan</div> <div class="month-table_col">Feb</div

我正在尝试选择包含按月选择表的div标记

...
<div class="month-table">
    <div class="month-table_row">
        <div class="month-table_col">Jan</div>
        <div class="month-table_col">Feb</div>
        <div class="month-table_col">Mar</div>
    </div>
    <div class="month-table_row">
        <div class="month-table_col">Apr</div>
        <div class="month-table_col">May</div>
        <div class="month-table_col">Jun</div>
    </div>
    <div class="month-table_row">
        <div class="month-table_col">Jul</div>
        <div class="month-table_col">Aug</div>
        <div class="month-table_col">Sep</div>
    </div>
    <div class="month-table_row">
        <div class="month-table_col">Oct</div>
        <div class="month-table_col">Nov</div>
        <div class="month-table_col">Dec</div>
    </div>
</div>
...
在Google Chrome控制台中运行以下命令后

$x("//div[contains(@class, 'month-table_col') and contains(text(), 'Nov')]")
结果:它返回一个由一个元素组成的数组,如下所示

[div.month-table_col]
   0: div.month-table_col
   lastIndex:(...)
   lastItem:(...)
   length: 1
   __proto__:Array(0)
即使我尝试指定索引1,它也会返回与上面所示相同的结果

返回的结果是正确的,但如果仍然存在这样的情况,我可以将元素作为标记获取,而不是数组结果

预期结果:

<div class="month-table_col">Nov</div>
$x始终返回一个数组,即使选择了单个节点,或者没有选择任何节点

然后可以使用JavaScript索引来提取任何给定的数组元素。如果XPath的结果是单个节点,则追加[0]以从返回的数组中获取该节点:

$x("//div[contains(@class, 'month-table_col') and contains(text(), 'Nov')]")[0]

提醒:XPath节点集和序列是基于1的;JavaScript数组是基于0的。

首先,我认为您还不了解包含在XPath中的作用。我想你想要@class='month-table\u col'而不是contains@class,“month-table_col”-包含对匹配子字符串的搜索。类似地,containstext'Nov'可能应该是简单的。='Nov'。如果可以,最好是比较元素的字符串值,而不是查找子文本节点

但这不是您的问题:您的问题是“//”与“[]”之间的运算符优先级。表达式//A[1]表示对于文档中的每个节点,如果有子元素,则选择其第一个节点作为子元素。您需要//一个[1],它将[1]谓词应用于最终结果,而不是每个子对象::一个单独的选择

<div class="month-table_col">Nov</div>
$x("//div[contains(@class, 'month-table_col') and contains(text(), 'Nov')]")[0]