2016-08-04 117 views
0

我有多個單元的網頁比如上例中,我想首先選擇50個複選框陣列的前n個元素......如何選擇XPath的元素

<td class="col-xs-0"> 
<input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 

我嘗試了用XPATH如:

.//*/td[@class="col-xs-0"]//input[@ng-click="selectedRun(record.file_name, record.run_status);"][position() <= 50] 

但它給了我頁面上的所有節點,我需要第一個50 ...錯誤在哪裏?謝謝。

+1

在第一眼你的例子看起來是正確的。請用可以複製問題的例子擴展您的問題...選擇例如只是前兩個節點。 – Markus

回答

0

position()給每個迭代的指數相對於它的父,你是從你的XPath獲得input元素相對於td並有各自td下面沒有50個input元素。首先讓符合標準,然後找到位置,所有td小號

//td[@class="col-xs-0" and count(child::*[name()="input"][@type="checkbox" and @ng-click="selectedRun(record.file_name, record.run_status);"])>0][position()<=50]

這XPath的工作原理:

相反,下面的XPath會爲你工作。

樣品輸入:

<root> 
<td class="col-xs-0"> 
<input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="radio" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="radio" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="radio" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
<td class="col-xs-0"> 
<input type="radio" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td> 
</root> 

中的XPath //td[@class="col-xs-0" and count(child::*[name()="input"][@type="checkbox" and @ng-click="selectedRun(record.file_name, record.run_status);"])>0][position()<=3]回報:

Element='<td class="col-xs-0"> 
    <input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td>' 
Element='<td class="col-xs-0"> 
    <input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td>' 
Element='<td class="col-xs-0"> 
    <input type="checkbox" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td>' 

,其中作爲XPath的//td[@class="col-xs-0" and count(child::*[name()="input"][@type="radio" and @ng-click="selectedRun(record.file_name, record.run_status);"])>0][position()<=2]回報:

Element='<td class="col-xs-0"> 
    <input type="radio" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td>' 
Element='<td class="col-xs-0"> 
    <input type="radio" ng-click="selectedRun(record.file_name, record.run_status);" /> 
</td>' 
+0

// @ td [@ class =「col-xs-0」和count(child :: * [name()=「input」] [@ type =「checkbox」and @ ng-click =「selectedRun(record.file_name ,record.run_status);「])> 0] [position()<= 50] - 返回0個節點...我可以重建xpath到// * [@ type =」checkbox「and @ ng-click = 「selectedRun(record.file_name,record.run_status);」] [position()<= 50]這個假設選擇所有節點並返回50,但現在它返回100(表中有100行) –

+0

你能顯示你的輸入文件嗎? – SomeDude

+0

我創建了一個包含多個'td'元素的示例xml我得到了我想要的元素 – SomeDude