簡體   English   中英

使用Jsoup解析Android應用程序表

[英]Parsing Table with Jsoup for Android App

我試圖通過網站上的表解析一個給定表行,其中第一列匹配某個字符串。 下面是表格的一部分的HTML(它非常大)

<table class="table display datatable" id="datatable1">
    <thead>
        <tr>
            <th class="va-m">Miner</th>
            <th class="va-m">Shares</th>
            <th class="va-m">%</th>
            <th class="va-m">Best DL</th>
        </tr>
    </thead>
    <tfoot>
        <tr>
            <th class="va-m">Miner</th>
            <th class="va-m">Shares</th>
            <th class="va-m">%</th>
            <th class="va-m">Best DL</th>
        </tr>
    </tfoot>
    <tbody>
        <tr>
            <td>3R8RDBxiux3g1pFCCsQnm2vwD34axsVRTrEWzyX8tngJaRnNWkbnuFEewzuBAKhQrb3LxEQHtuBg1zW4tybt83SS</td>
            <td>44279</td>
            <td>27.37 %</td>
            <td>1154</td>
        </tr>
        <tr>
            <td>5gwVxC9cXguHHjD9wtTpHfsJPaZx4fPcvWD5jGWF1dcuHnAMyXxteaHrEtXviZkvWN3FAnevbVLErABSsP6mS7PR</td>
            <td>36369</td>
            <td>22.48 %</td>
            <td>2725</td>
        </tr>
        <tr>
            <td>2qZXPmop82UiA7LQEQqdoUzjFbcwCSpqf8U1f3656XXSsHnGvGXYTNoP11s2asiVSyVS8LPFqxmpdCeSNxcpFMnF</td>
            <td>28596</td>
            <td>17.68 %</td>
            <td>967</td>
        </tr>
        <tr>
            <td>21mbNSDo7g9BAyjsZGxnNfJUrEtBUVVNQZhR4tkVwdEHPaMNsa2u2JHQPAAe5riGfPA9Khb1Pq3bQGhqmrLEGNqN</td>
            <td>6104</td>
            <td>3.77 %</td>
            <td>4787</td>
        </tr>
        <tr>
            <td>4HAakKK7dSq18Djg7m6cLSyHb5aUU6ngvBQimo8pYyF5F64qX3gE4T8q8kfWHTZ79FvXybSG3JhUfSZDDv2sRwqY</td>
            <td>5895</td>
            <td>3.64 %</td>
            <td>6020</td>
        </tr>
        <tr>
            <td>2r2izPEC5o7ZDnUsdDA97q8wKCeZRRg9n243Rd9vkMQqRCtc6ZRUTruQUyZGduoHy8pTYPuEq9ACXPKfXt8fqKxS</td>
            <td>5605</td>
            <td>3.46 %</td>
            <td>10958</td>
        </tr>
    </tbody>
</table>

我試圖遍歷表並搜索特定行但我收到IndexOutOfBoundsException

是否有更好的方法來編寫下面的聲明?

for (Element table : doc.select("table")){
    for(Element row : table.select("tr")){
        Elements tds = row.select("td");
        if(tds.get(0).text().equals("4HjSN79KUMz7AQC3GBvGkgPa5Qrio9HWTh7hg9JY48fkrYeVZJVmzB9YCB6GZSpuXB7V7DjJVuke3ZaCm5k7sRLE")){
            myHistoricShares =tds.get(0).text();
        }
    }
}

正如我在評論中所說,你的table.select("tr")不僅在<tbody>選擇行,而且在頁眉和頁腳內也選擇行。 對於那些行, row.select("td")返回一個空列表,因此tds.get(0)拋出IndexOutOfBoundsException

您可以通過僅選擇<tbody>的行來簡化循環:

for (Element row: doc.select("table#datatable1>tbody>tr")) {
    if (row.children().size() > 0 && "some_long_string".equals(row.child(0).text())) {
        doSomething();
    }
}

選擇器"table#datatable1>tbody>tr"選擇id="datatable1"的表,然后是精確的tbody子項,然后是所有精確的tr子項。 所以你只需要迭代一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM