2013-05-08 21 views
9

Anche se questo può sembrare troppo semplice, vorrei chiedere come rimuovere un elemento da doc usando Jsoup.JSoup Remove Elements

Ho provato a cercarlo, ma senza successo.

Ecco problema:

Elements myNewElements = doc.getElementsByAttribute("hello"); 

//Now I need to perform some other methods on myNewElements before removing. 
//Hence..suggested method says, 
doc.getElementsByAttribute("hello").remove(); 

Questo funziona bene. Ma credo che la selezione degli stessi elementi ancora e ancora possa dimostrare fame di memoria. È possibile ?

doc.select(myNewElements).remove(); 

// Prova a selezionare myNewElements da doc.

+0

Il 'select()' metodo non prende 'Elements' come argomento - ci vuole * *stringhe**! http://jsoup.org/apidocs/org/jsoup/nodes/Element.html#select%28java.lang.String%29 – ollo

+0

sì, ho menzionato in questione. – akshayb

risposta

22

Se non sono stati aggiunti nuovi elementi che corrispondono alla selezione iniziale, non è necessario selezionare di nuovo gli elementi.

Ogni elemento negli elementi ha un riferimento al suo genitore e il metodo remove() dice semplicemente al genitore di rimuovere quell'elemento figlio.

In sostanza, solo facendo:

myNewElements.remove() 

dovrebbe funzionare.

+1

sta mostrando alcune eccezioni, ma ho ottenuto la logica. Grazie. – akshayb

+1

La pubblicazione di tali eccezioni sarebbe utile. Anche se funziona, le eccezioni sono un buon indizio che c'è qualcosa di sbagliato. – ollo

0

Meglio ciclo sugli elementi e rimuoverli entro:

for(Element element : doc.select(myNewElements)) 
{ 
    element.remove(); 
} 

C'è una domanda simile: Parse html with jsoup and remove the tag block

+0

come se myNewElements.get (0) .remove()? può essere? – yozawiratama

+1

Non è necessario e aggiunge ulteriore elaborazione. Rimuovendo l'elemento root che vuoi rimuovere anche rimuovi tutti gli elementi figlio. –