2012-04-30 1 views
6

Я использую JTidy v. R938. Я использую этот код, чтобы попытаться очистить страницу ...Как сделать JTIdy для корректного формирования HTML-документов?

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

Но когда я анализирую этот URL - http://www.chicagoreader.com/chicago/EventSearch?narrowByDate=This+Week&eventCategory=93922&keywords=&page=1, вещи не получают очищены. Например, мета-теги на странице, как

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

остаются

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

вместо того, чтобы иметь "</META >" тег или появляясь как "< META HTTP-эквив =" Content -Type "content =" text/html; charset = UTF-8 "/ >". Я подтверждаю это, выведя полученный JTidy org.w3c.dom.Document как String.

Что я могу сделать, чтобы JTidy действительно очистил страницу - т. Е. Сделал ее хорошо сформированной? Я понимаю, что есть другие инструменты, но этот вопрос конкретно связан с использованием JTIdy.

+1

Когда-нибудь решение этой проблемы? –

ответ

4

Вам необходимо указать несколько флагов в Tidy, если вы хотите 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"); 
} 

Или просто, если хотите XHTML форму

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

Я пробовал это как с «setXmlOut», так и «setXHTML», но не создал хорошо сформированный документ, возвращенный «document = tidy.parseDOM (...)». Кроме того, JTidy выплевывает сообщение: «У этого документа есть ошибки, которые должны быть исправлены до с использованием HTML Tidy для создания унаследованной версии». – Dave

3

использование tidy.setXmlTags (истина); для анализа XML вместо HTML

+0

Он работал для одного из моих синтаксических разборов HTML с аккуратным .. Спасибо :) – CFUser

2

Используйте Tidy.setForceOutput(true) (на свой страх и риск) для генерации вывода, даже если обнаружены ошибки.

1

я анализирую в HTML 2 раза, чтобы получить хорошо сформирован 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();