Jsoup - 逐一阅读

时间:2013-03-01 17:22:46

标签: java html html-parsing jsoup

我最近开始使用Jsoup。我需要在HTML源代码中列出一些元素。例如:

 <table class="list">
    <tr>
        <td class="year" colspan="5">2012</td>
    </tr>
    <tr>
        <td class="code">COMP0348</td>
        <td class="name">Software Engineering</td>
    </tr>
    <tr>
        <td class="code">COMP0734</td>
        <td class="name">System Information</td>
    </tr>
    <td class="year" colspan="5">2013</td>
    </tr>
    <tr>
        <td class="code">COMP999</td>
        <td class="name">Windows</td>
    </tr>
</table>

这就是我想要的:

2012 
Comp0348 Software Engineering
COMP0734 System Information
2013
COMP999 Windows

但是在我的代码中,它不是逐个列出的,它列出了一个包含第一个所有“年份”的字符串,然后列在包含所有“代码”的另一行中,之后在另一行中包含所有“名称”。 喜欢:

2012 
Comp0348 COMP0734 COMP999
Software Engineering System Information Windows

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我猜你只按标准选择标签,而不是结构。

但请看这里:

Document doc = ...

Element table = doc.select("table.list").first(); // select the table


for( Element element : table.select("tr") ) // select all 'tr' of the table
{
    final Elements td = element.select("td.year"); // select the 'td' with 'year' class

    if( !td.isEmpty() ) // if it's the one with the 'year' class
    {
        final String year = td.first().text(); // get year

        System.out.println(year);
    }
    else // if it's another 'tr' tag containing the 'code' and 'name' element
    {
        final String code = element.select("td.code").first().text(); // get code
        final String name = element.select("td.name").first().text(); // get name

        System.out.println(code + " " + name);
    }
}

输出(使用您的html):

2012
COMP0348 Software Engineering
COMP0734 System Information
2013
COMP999 Windows