2015-09-17 17 views
6

Mam następujący kod HTML, używając Jsoup Próbuję wyodrębnić tekst w sekcji p, która nie ma żadnych atrybutów (tekst "Some text 2", a nie "Some text 1" ").Uzyskiwanie elementu bez atrybutów przy użyciu Jsoup

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

Próbowałem za pomocą następującego wyrażenia Jsoup:

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

Ale to nie działa. Dzięki za pomoc.

+0

co powiecie na '" div # intro p: not (#some_id) "' to wybierze sekundę p, ale tylko w twoim przypadku, nie mówi wszystkich p bez żadnego atrybutu w ogóle –

Odpowiedz

3

Myślę, że można użyć JSOUP CSS selectorp:not([^]), która wybierze dowolne p, które nie pasuje do atrybutu zaczynającego się od czegokolwiek.

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

powyższy przykład będzie drukować tylko

Some text 2 

bo tylko ten element p ma atrybuty.

Należy zauważyć, że selektor p[^] wybierze wszystkie elementy p, które mają atrybut.

+0

Dzięki, "div [id = intro]> p: not ([^]) "działa! – Alexander

Powiązane problemy