2012-08-22 9 views
5

他のすべてのコンテンツを変更しないで、HTMLファイルの一部の要素を置き換えたいとします。jsoupでHTMLを解析して元のコンテンツを保存する

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

は、私は次のような出力持つことを期待:代わりに

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

を、私が持っている:

<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が追加さ:

  1. 閉じたpタグ
  2. DOUB LE-引用符が

  • のtbody
  • HTML、頭と体の要素は、私が元にHTMLを修正シリアライズできる値属性には? Jerichoはそうですが、Jsoupのように滑らかなDOM操作方法を提供していません。

  • +2

    JSoupはあなたの要素の文字オフセットを与える場合は、それを行うことができます。 http://stackoverflow.com/questions/11387458/get-character-offsets-for-elements-in-jsoupを参照してください。この機能が必要です。残念ながら、JSoupの作者は、jsoup googleグループに投稿された質問にはもう応答しません。 – ccleve

    答えて

    0

    属性値を引用してはならない理由はありますか? hereおよびhereを参照してください。その他の点については

    はこれを試してみてください。

    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); 
    
    関連する問題