2012-04-30 35 views
6

Tôi đang sử dụng JTidy v. R938. Tôi đang sử dụng mã này để cố gắng dọn dẹp một trang ...Tôi làm cách nào để JTIdy tạo tài liệu HTML được định dạng đúng?

final Tidy tidy = new Tidy(); 
tidy.setQuiet(false); 
tidy.setShowWarnings(true); 
tidy.setShowErrors(0); 
tidy.setMakeClean(true); 
Document document = tidy.parseDOM(conn.getInputStream(), null); 

Nhưng khi tôi phân tích cú pháp URL này - http://www.chicagoreader.com/chicago/EventSearch?narrowByDate=This+Week&eventCategory=93922&keywords=&page=1, mọi thứ đều không nhận được dọn dẹp. Ví dụ, các thẻ META trên trang web, giống như

<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

vẫn là

<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

thay vì có một "</META >" tag hoặc xuất hiện như "< META http-equiv =" Content -Type "content =" text/html; charset = UTF-8 "/ >". Tôi xác nhận điều này bằng cách xuất kết quả JTidy org.w3c.dom.Document thành String.

Tôi có thể làm gì để làm cho JTidy thực sự dọn sạch trang - tức là làm cho trang này được tạo đúng? Tôi nhận ra có những công cụ khác ngoài kia, nhưng câu hỏi này đặc biệt liên quan đến việc sử dụng JTIdy.

+1

Kể tìm một giải pháp cho điều này? –

Trả lời

4

Bạn cần chỉ định vài cờ để Tidy nếu bạn muốn định dạng XML

private String cleanData(String data) throws UnsupportedEncodingException { 
    Tidy tidy = new Tidy(); 
    tidy.setInputEncoding("UTF-8"); 
    tidy.setOutputEncoding("UTF-8"); 
    tidy.setWraplen(Integer.MAX_VALUE); 
    tidy.setPrintBodyOnly(true); 
    tidy.setXmlOut(true); 
    tidy.setSmartIndent(true); 
    ByteArrayInputStream inputStream = new ByteArrayInputStream(data.getBytes("UTF-8")); 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    tidy.parseDOM(inputStream, outputStream); 
    return outputStream.toString("UTF-8"); 
} 

Hoặc đơn giản là nếu muốn hình thức XHTML

Tidy tidy = new Tidy(); 
tidy.setXHTML(true); 
+3

Tôi đã thử điều này với cả hai "setXmlOut" và "setXHTML" nhưng không tạo ra một tài liệu được định dạng tốt được trả về bởi "document = tidy.parseDOM (...)". Ngoài ra, JTidy đang loại bỏ thông báo "Tài liệu này có lỗi phải được sửa trước bằng cách sử dụng HTML Tidy để tạo phiên bản được dọn dẹp". – Dave

3

tidy.setXmlTags sử dụng (true); để phân tích cú pháp XML thay vì HTML

+0

Nó làm việc cho một trong các vấn đề phân tích cú pháp HTML của tôi với gọn gàng .. Cảm ơn :) – CFUser

2

Sử dụng Tidy.setForceOutput(true) (có nguy cơ của riêng bạn) để tạo đầu ra ngay cả khi tìm thấy lỗi.

1

tôi phân tích HTML 2 lần để có được cũng được hình thành xml

BufferedReader br = new BufferedReader(new StringReader(str)); 
    StringWriter sw = new StringWriter(); 

    Tidy t = new Tidy(); 
    t.setDropEmptyParas(true); 
    t.setShowWarnings(false); //to hide errors 
    t.setQuiet(true); //to hide warning 
    t.setUpperCaseAttrs(false); 
    t.setUpperCaseTags(false); 
    t.parse(br,sw); 
    StringBuffer sb = sw.getBuffer(); 
    String strClean = sb.toString(); 
    br.close(); 
    sw.close(); 

    //do another round of tidyness 
    br = new BufferedReader(new StringReader(strClean)); 
    sw = new StringWriter(); 

    t = new Tidy(); 
    t.setXmlTags(true); 
    t.parse(br,sw); 
    sb = sw.getBuffer(); 
    String strClean2 = sb.toString(); 
    br.close(); 
    sw.close(); 
Các vấn đề liên quan