2012-08-22 8 views
5

HTML dosyalarındaki bazı öğeleri değiştirmek ve diğer tüm içeriği değiştirmeden saklamak istiyorum.jsoup ile HTML'yi ayrıştırın ve orijinal içeriği koruyun

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

aşağıdaki çıktıyı olmasını bekliyoruz: Yerine

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

, ben:

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

  1. kapanış p etiketleri
  2. doub le-tırnak

  • tbody
  • html, baş ve gövde elemanları geri orijinal HTML modifiye tefrika Can değerlerin atfetme? Jericho bunu yapar, ancak Jsoup'un yaptığı gibi kayma DOM manipülasyon yöntemleri sağlamaz.

  • +2

    Bunu yapabilirdi: diğer noktaları için

    bu deneyin. Http://stackoverflow.com/questions/11387458/get-character-offsets-for-elements-in-jsoup adresine bakın. Bu özelliğe ihtiyacımız var. Ne yazık ki, JSoup'un yazarı artık jsoup google grubuna gönderilen sorulara cevap vermiyor. – ccleve

    cevap

    0

    Özellik değerlerinin neden alıntılanmamasının bir nedeni var mı? Bkz. here ve here. JSoup size elemanların karakter uzaklıklar verecekti eğer

    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); 
    
    İlgili konular