2012-08-22 27 views
5

Tôi muốn thay thế một số thành phần trong tệp HTML, giữ cho tất cả các nội dung khác không thay đổi.Phân tích cú pháp HTML với jsoup và giữ nguyên nội dung gốc

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

Tôi hy vọng sẽ có kết quả như sau:

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

Thay vào đó, tôi có:

<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 thêm:

  1. đóng p thẻ
  2. doub le-dấu ngoặc kép để giá trị thuộc tính
  3. tbody
  4. html, người đứng đầu và cơ thể yếu tố

Tôi có thể serialise sửa đổi HTML trở lại ban đầu? Jericho thực hiện điều đó nhưng không cung cấp các phương thức thao tác DOM trơn tru như Jsoup.

+2

Bạn có thể làm điều đó nếu JSoup sẽ cung cấp cho bạn các hiệu đặc trưng của các yếu tố. Xem http://stackoverflow.com/questions/11387458/get-character-offsets-for-elements-in-jsoup. Chúng ta cần tính năng này. Thật không may, tác giả của JSoup không còn trả lời các câu hỏi được đăng lên nhóm google jsoup nữa. – ccleve

Trả lời

0

Có lý do nào khiến giá trị thuộc tính không được trích dẫn không? Xem herehere.

Đối với các điểm khác thử điều này:

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); 
Các vấn đề liên quan