2015-09-17 16 views
6

Ho il seguente html, utilizzando Jsoup Sto provando ad estrarre il testo nella sezione p che non ha attributi (il testo "Some text 2" e non "Some text 1 ").Ottenere elemento senza attributi utilizzando Jsoup

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

Ho provato ad utilizzare la seguente espressione Jsoup:

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

Ma non funziona. Grazie per il vostro aiuto.

+0

come su '" div # intro p: not (#some_id) "' selezionerà secondo p ma solo nel tuo caso, non dice tutti i p senza alcun attributo –

risposta

3

Penso che sia possibile utilizzare lo JSOUP CSS selectorp:not([^]), che selezionerebbe qualsiasi p che non corrisponde ad avere un attributo che inizia con qualcosa.

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()); 
} 

l'esempio precedente stamperà solo

Some text 2 

perché solo questo elemento p non ha attributi.

Si noti che il selettore p[^] selezionerà tutti gli elementi p che hanno un attributo.

+0

Grazie, "div [id = intro]> p: not ([^]) "funziona! – Alexander