Jsoup解析html某片段的问题

案例

在使用jsoup解析html中的某部分片段时,有时候会遇到解析不出字段。下面以案例进行讲解。

<tr>
    <td class='center'>
        <font class='blue'>
            北京
        </font>
    </td>
    <td>
        36175
    </td>
    <td>
        2.03
    </td>
</tr>
<tr>
    <td class='center'>
        <font class='blue'>
            盐城
        </font>
    </td>
    <td>
        5466
    </td>
    <td>
        -0.26
    </td>
</tr>

这是一段html中的字段,我在解析该字段时,无法获得其中的信息。如下是解析代码。

        //html为带解析的片段
        Document document=Jsoup.parse(html);
        Elements elements=document.select("tr");
        for (Element ele:elements) {
            String city=ele.select("td[class=center]").text();
            int price=Integer.parseInt(ele.select("td").get(1).text());
            double rose=Float.parseFloat(ele.select("td").get(2).text())*0.01;
            System.out.println(city);
        }

运行程序发现根本没办法获取内容。

问题分析

原来在解析html片段时,Jsoup自动将其补全为html。由于上面的形式是表格里面的一部分内容,所有需要补全。但Jsoup只会添加 信息,而且有可能会把一些信息删除。
如下,为上面html片段,补充的后果。这对解析没有什么帮助。

<html>
 <head></head>
 <body>
  <font class="blue">北京</font>361752.03
  <font class="blue">盐城</font>5466-0.26
 </body>
</html>

解决办法

将表格对应的标签补齐。

String cc="<html>  <body> <table> <tbody>"+html.replace("{\"data\":\"", "").replace("\"}", "")+"</tbody> </table> </body> </html>";
        Document document=Jsoup.parse(cc);
        Elements elements=document.select("tr");
        System.out.println(document);
        for (Element ele:elements) {
            String city=ele.select("td[class=center]").text();
            int price=Integer.parseInt(ele.select("td").get(1).text());
            double rose=Float.parseFloat(ele.select("td").get(2).text())*0.01;
            System.out.println(city);
        }

这就没问题,成功解决。