当td有内部表JSoup时如何获取外部td数据

时间:2014-09-04 09:31:46

标签: html jsoup

我正在使用JSoup进行网页报废。我有一个类名为.chart的表,其中包含行(tr),行包含数据(td)。但是有些tds里面还有包含行和tds的表。这是这些问题之一的形式:

<td align="center" onmouseout="hideAlt(104692)" onmouseover="showAlt(104692)">
21
<div id="as104692" class="altsrc" style="height: 32px; top: 308px; left: 622px; display: none;">
<b>Alt Src Locations</b>
<br>
<table class="none" border="0">
<tbody>
<tr>
<td>Lisac's Tire Butte</td>
<td align="right">21</td>
</tr>
</tbody>
</table>
</div>

这就是我获取数据的方式:

Elements e = manuf.select("table.chart tr");
            for(Element el : e) {
                Elements columns = el.select("td");
                for(Element c : columns) {
                    System.out.print(c.text() + ", ");
                }
}

这是我得到的结果:21 Alt Src地点Lisac的轮胎比尤特21 这就是我想要的结果:21

我如何告诉程序只接受第一个td并且不能将它们放在里面?

1 个答案:

答案 0 :(得分:1)

使用ownText()immediate child选择器

的组合,您可以实现您想要的效果
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Main {

    public static void main(String[] args) {
        try {
            String html = "<table class=\"chart\">" +
                          "<tr>" +
                          "<td align=\"center\" onmouseout=\"hideAlt(104692)\" onmouseover=\"showAlt(104692)\">" +
                          "21" +
                          "<div id=\"as104692\" class=\"altsrc\" style=\"height: 32px; top: 308px; left: 622px; display: none;\">" +
                          "<b>Alt Src Locations</b>" +
                          "<br>" +
                          "<table class=\"none\" border=\"0\">" +
                          "<tbody>" +
                          "<tr>" +
                          "<td>Lisac's Tire Butte</td>" +
                          "<td align=\"right\">21</td>" +
                          "</tr>" +
                          "</tbody>" +
                          "</table>" +
                          "</div>" +
                          "</td>" +
                          "</tr>" +
                          "</table>";

            Document doc = Jsoup.parse(html);

            Elements els = doc.select("table.chart>tbody>tr>td");
            for(Element el: els) 
                System.out.println(el.ownText());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}