2012-08-15 294 views
0

我是Jsoup的新手,我试图解析一个html文件来查找所有没有id的元素。到现在为止我只有这个代码片段:Jsoup:在html中找到没有id的元素

  Document doc = Jsoup.parse(input, null); 
     for (Element el : doc.getAllElements()) { 
      hasId = el.hasAttr("id"); 
      if (!hasId) { 
       idList.add(el.tagName()); 
      } else { 
       log.info("id:" + el.attr("id")); 
      } 
     } 

一个id的元件被正确发现。我的问题是我只想扫描开始元素,如果他们有一个ID。我可以用Jsoup处理这个问题吗?

回答

2

我不确定我是否正确理解您的问题,但我认为您只是想选择所有没有id属性的元素。如果是的话,这应该工作:

doc.select("*:not([id])") 

还有的jsoup网站上full list of selectors

更新:

这里有一个完整的例子:

import org.jsoup.Jsoup; 
import org.jsoup.nodes.*; 

public class Soup { 
    public static void main(String[] args) { 
    String data = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"> <tr> <td class=\"reportheader\" align=\"left\" nowrap width=\"720\">Outside my Dreams</td> </tr> </table>"; 
    Document doc = Jsoup.parse(data); 
    StringBuilder tags = new StringBuilder(); 
    for (Element el : doc.select("body *:not([id])")) { 
     tags.append(el.tagName()); 
     tags.append(' '); 
    } 
    System.out.println(tags); 
    } 
} 

运行上面我的机器上给了我这样的输出:table tbody tr td

注意,我改变了查询稍微:"body *:not([id])"。在前面添加body不包括在解析data字符串中的部分文档时Jsoup自动添加的<html><title></title><body> ... </body></html>

+0

thx为您的答案,但我的意思是;假设我们有这样的代码:

我的梦想之外
[/代码],我想从搜索中排除所有结束标记(例如,, goya 2012-08-15 10:11:14

+0

我不确定我是否只是不理解你,或者你真的很困惑。结果中不会包含结束标签作为“元素”。您只能在'.toString()'的输出中看到结束标记,以便您可以清楚地看到嵌套。结束标签并不是真正的元素 - 它们只是表示元素的结尾。您可以通过上面添加的示例中的输出清楚地看到这一点。 – DaoWen 2012-08-15 12:18:46

+0

thx很多四个你的帮助!我开始理解选择器语法。会在接下来的日子里尝试更加熟悉它。 – goya 2012-08-15 13:40:05