2012-08-22 12 views
5

Desidero sostituire alcuni elementi nei file HTML, mantenendo tutti gli altri contenuti invariati.Analizza HTML con jsoup e conserva il contenuto originale

Document doc = Jsoup.parse("<div id=title>Old</div >\n" + 
     "<p>1<p>2\n" + 
     "<table><tr><td>1</td></tr></table>"); 
doc.getElementById("title").text("New"); 
System.out.println(doc.toString()); 

mi aspetto di avere il seguente output:

<div id=title>New</span></div > 
<p>1<p>2 
<table><tr><td>1</td></tr></table> 

Invece, ho:

<html> 
<head></head> 
<body> 
    <div id="title">New</div> 
    <p>1</p> 
    <p>2 </p> 
    <table> 
    <tbody> 
    <tr> 
    <td>1</td> 
    </tr> 
    </tbody> 
    </table> 
</body> 
</html> 

Jsoup aggiunto:

  1. chiusura p tag
  2. Dop le-virgolette per i valori degli attributi
  3. tbody
  4. html, testa e corpo elementi

Posso puntate modificato HTML Torna all'originale? Jericho lo fa ma non fornisce i metodi di manipolazione DOM slick come fa Jsoup.

+2

Si potrebbe farlo se JSoup darebbe gli offset di carattere degli elementi. Vedi http://stackoverflow.com/questions/11387458/get-character-offsets-for-elements-in-jsoup. Abbiamo bisogno di questa funzionalità. Sfortunatamente, l'autore di JSoup non risponde più alle domande postate al gruppo google jsoup. – ccleve

risposta

0

C'è un motivo per cui i valori degli attributi non devono essere citati? Vedi here e here.

Per gli altri punti provare questo:

final String html = "<div id=title>Old</div >\n" 
      + "<p>1<p>2\n" 
      + "<table><tr><td>1</td></tr></table>"; 

Document doc = Jsoup.parse(html); 
doc.select("[id=title]").first().text("New"); 
doc.select("body, head, html, tbody").unwrap(); 
doc.outputSettings().prettyPrint(false); 

System.out.println(doc); 
Problemi correlati