2015-09-17 61 views
6

我有以下html,使用Jsoup我试图提取p部分中没有任何属性的文本(文本“某些文本2”,而不是“某些文本1 “)。使用Jsoup获取没有属性的元素

<div id="intro"> 
    <h1 class="some class"> 
    <p id="some_id"> 
     Some text 1 
    </p> 
    <p> 
     Some text 2 
    </p> 
</div> 

我试着用以下Jsoup表达:

div[id=intro] > p:not(:has(@*)) 

但它不工作。 感谢您的帮助。

+0

''div#intro p:not(#some_id)''它会选择第二个p,但只在你的情况下,它不会说所有的p都没有attribs –

回答

3

我认为你可以使用JSOUP CSS selectorp:not([^]),它会选择任何不匹配的p都有一个以任何开头的属性。

String html = "<div id=\"intro\">" 
     + "<h1 class=\"some class\">" 
     + "<p id=\"some_id\">" 
     + "Some text 1" 
     + "</p>" 
     + "<p name=\"some_name\">" 
     + "Some text A" 
     + "</p>" 
     + "<p data>" 
     + "Some text B" 
     + "</p>" 
     +"<p>" 
     + "Some text 2" 
     +"</p>" 
     +"</div> "; 

Document doc = Jsoup.parse(html); 
Elements els = doc.select("p:not([^])"); 
for (Element el:els){ 
    System.out.println(el.text()); 
} 

上面的例子将只打印出

Some text 2 

因为只有这个p元素没有属性。

请注意,选择器p[^]将选取所有具有属性的p元素。

+0

Thanks,“div [id = intro]> p:not([^])“works! – Alexander