JSoup从标签内解析数据

时间:2014-04-16 09:19:42

标签: java parsing jsoup

我正在设法解析我需要的大部分数据,除了一个,因为它包含在一个href标签中,我需要在“mmsi =”之后出现的数字

<a href="/showship.php?mmsi=235083844">Sunsail 4013</a>

我当前的解析器获取了我需要的所有其他数据,如下所示。我尝试了一些注释掉的代码,偶尔返回未指定的条目。有什么方法可以添加到我的代码中,以便在返回数据时,数字“235083844”在名称“Sunsail 4013”之前返回?

try {
        File input = new File("shipMove.txt");
        Document doc = Jsoup.parse(input, null);
        Elements tables = doc.select("table.shipInfo");
        for( Element element : tables )
        {
            Elements tdTags = element.select("td");
            //Elements mmsi = element.select("a[href*=/showship.php?mmsi=]");
            // Iterate over all 'td' tags found
            for( Element td : tdTags ){
                // Print it's text if not empty
                final String text = td.text();
                if( text.isEmpty() == false )
                {
                    System.out.println(td.text());
                }
            }
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

解析数据的示例和html文件here

2 个答案:

答案 0 :(得分:1)

  1. 您可以在attr对象上使用Element来检索特定属性的值
  2. 如果字符串模式一致
  3. ,请使用substring获取所需的值

    代码

    // Using just your anchor html tag
    String html = "<a href=\"/showship.php?mmsi=235083844\">Sunsail 4013</a>";
    Document doc = Jsoup.parse(html);
    
    // Just selecting the anchor tag, for your implementation use a generic one
    Element link = doc.select("a").first();
    
    // Get the attribute value
    String url = link.attr("href");
    
    // Check for nulls here and take the substring from '=' onwards
    String id = url.substring(url.indexOf('=') + 1);
    System.out.println(id + " "+ link.text());
    

    给出,

    235083844 Sunsail 4013
    

    来自代码的for循环中的修改条件:

    ...
        for (Element td : tdTags) {
                    // Print it's text if not empty
                    final String text = td.text();
                    if (text.isEmpty() == false) {
                        if (td.getElementsByTag("a").first() != null) {
                            // Get the attribute value
                            String url = td.getElementsByTag("a").first().attr("href");
    
                            // Check for nulls here and take the substring from '=' onwards
                            String id = url.substring(url.indexOf('=') + 1);
                            System.out.println(id + " "+ td.text());
                        }
                        else {
                            System.out.println(td.text());
                        }
                    }
                }
    ...
    

    上面的代码会打印出所需的输出。

答案 1 :(得分:0)

如果您需要属性值,则应使用attr()方法。

for( Element td : tdTags ){
    Elements aList = td.select("a");
    for(Element a : aList){
        String val = a.attr("href");
        if(StringUrils.isNotBlank(val)){
            String yourId = val.substring(val.indexOf("=") + 1);


        }
}