2012-08-22 17 views
5

Chcę zastąpić niektóre elementy w plikach HTML, zachowując pozostałą zawartość bez zmian.Analizowanie kodu HTML za pomocą polecenia jsoup i zachowanie oryginalnej zawartości

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

spodziewam się mieć następujący wynik:

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

Zamiast tego mam:

<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 dodania:

  1. zamykające znaczniki p
  2. DOUB le-cytaty do wartości atrybutów
  3. tbody
  4. html, głowy i ciała elementy

Mogę serialise zmodyfikowany HTML z powrotem do oryginału? Jericho robi to, ale nie zapewnia zręcznych metod manipulacji DOM, tak jak robi to Jsoup.

+2

Można to zrobić, jeśli JSoup nie daje przesunięcia charakter elementów. Zobacz http://stackoverflow.com/questions/11387458/get-character-offsets-for-elements-in-jsoup. Potrzebujemy tej funkcji. Niestety, autor JSoup nie odpowiada już na pytania wysłane do grupy jsoup google. – ccleve

Odpowiedz

0

Czy istnieje powód, dla którego wartości atrybutów nie powinny być notowane? Zobacz here i here.

Dla pozostałych punktów spróbuj tego:

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