2012-08-22 23 views
5

Quiero reemplazar algunos elementos en archivos HTML, manteniendo el resto del contenido sin cambios.Analizar HTML con jsoup y conservar el contenido original

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

espero tener el siguiente resultado:

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

En cambio, tengo:

<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 añadido:

  1. cierre etiquetas p
  2. DOUB le-cotizaciones de valores de atributos elementos
  3. tbody
  4. html, cabeza y cuerpo

¿Puedo serializar modificada HTML de nuevo a original? Jericho hace eso pero no proporciona métodos de manipulación de DOM hábiles como lo hace Jsoup.

+2

Usted podría hacerlo si JSoup le daría las compensaciones de carácter de los elementos. Ver http://stackoverflow.com/questions/11387458/get-character-offsets-for-elements-in-jsoup. Necesitamos esta característica. Desafortunadamente, el autor de JSoup ya no responde a las preguntas publicadas en el grupo jsoup google. – ccleve

Respuesta

0

¿Hay alguna razón por la que los valores de los atributos no se puedan obtener? Ver here y here.

Para los otros puntos a probar esto:

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); 
Cuestiones relacionadas