2012-04-30 17 views
6

Używam JTidy v. R938. Używam tego kodu, aby próbować oczyścić stronę ...Jak sprawić, aby JTIdy tworzyło dobrze dokumenty 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); 

Ale kiedy analizować ten adres - http://www.chicagoreader.com/chicago/EventSearch?narrowByDate=This+Week&eventCategory=93922&keywords=&page=1, rzeczy nie są coraz czyszczone. Na przykład, meta tagi na stronie, jak

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

pozostanie

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

zamiast o "</META >" tag lub wyglądające jak "< meta http-equiv =" Content -Type "content =" text/html; charset = UTF-8 "/ >". Potwierdzam to, wysyłając wynikowy plik JTidy org.w3c.dom.Document jako ciąg.

Co mogę zrobić, aby JTidy naprawdę oczyściło stronę - czyli uczynić ją dobrze uformowaną? Zdaję sobie sprawę, że istnieją inne narzędzia, ale to pytanie dotyczy konkretnie korzystania z JTIdy.

+1

kiedykolwiek znaleźć rozwiązanie tego? –

Odpowiedz

4

Musisz podać kilka flag uporządkować jeśli chcesz formacie 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"); 
} 

Albo po prostu jeśli chcesz formularz XHTML

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

Próbowałem tego z "setXmlOut" i "setXHTML", ale żaden nie wygenerował dobrze sformułowany dokument zwrócony przez "document = tidy.parseDOM (...)". Ponadto JTidy wypisuje komunikat: "Ten dokument zawiera błędy, które muszą zostać naprawione przed przy użyciu HTML Tidy, aby wygenerować uporządkowaną wersję." – Dave

3

użytku tidy.setXmlTags (true); do parsowania XML zamiast HTML

+0

To działało na jeden z moich problemów z parsowaniem HTML. Dzięki :) – CFUser

2

Użyj Tidy.setForceOutput(true) (na własne ryzyko), aby wygenerować wynik, nawet jeśli zostaną znalezione błędy.

1

I analizować HTML 2 razy, aby uzyskać dobrze uformowane 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(); 
Powiązane problemy