[英]JTidy reports “3 errors were found!”… but does not say what they are
我有一大堆以編程方式生成的HTML。 我使用以下Java代碼通過Tidy(版本r938)運行了該代碼:
StringReader inStr = new StringReader(htmlInput);
StringWriter outStr = new StringWriter();
Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.parseDOM(inStr, outStr);
我得到以下輸出:
InputStream: Document content looks like HTML 4.01 Transitional
247 warnings, 3 errors were found!
This document has errors that must be fixed before
using HTML Tidy to generate a tidied up version.
麻煩的是,Tidy沒有告訴我發現了3個錯誤。
我在這里擺弄一點。 上面的輸出實際上是所有247條警告的一長串(主要是修剪掉空的div
元素)。 我可以使用tidy.setShowWarnings(false)
禁止顯示這些tidy.setShowWarnings(false)
; 無論哪種方式,我都看不到錯誤報告,因此無法弄清楚需要解決的問題。 300Kb的HTML對我來說實在太大了。
我嘗試了多種方法來查找錯誤。 遺憾的是,由於HTML文件位於專有網絡上,因此我無法通過validate.w3.org運行它。 最有用的方法是在IntelliJ IDEA中打開它。 這顯示了十幾個重復的div ID,我已對其進行了修復。 仍然發生錯誤。
我到處尋找有關此問題的其他提及。 當我發現諸如“如何使用JTidy如何從已解析的HTML中獲取錯誤/警告消息?”之類的熱門文章時, ,他們似乎都在要求不同的東西,或者假設條件根本不適合我。 例如,我得到的警告很好。 這是我需要的錯誤 ,即使我調用setShowErrors(100)
東西也沒有得到報告。
我是否必須深入Tidy的源代碼並對其進行調試,從報告錯誤的地方開始? 還是我可以做些更簡單的事情?
這是我最終要找出錯誤的方法:
org.w3.tidy.Report.error()
的第一行增加lexer.errors
; 在詞法分析器的許多地方調用error()
。 lexbuf
是一個字節數組,因此您的IDE可能不會將其顯示為文本。 它也可能很大。 您可能想要查看lexbuf
的詞法分析器正在查看的lexbuf
。 如有必要,請使用字節數組的該部分,並將其與ASCII表進行交叉引用以獲取文本。 這比原本應該涉及的要復雜得多。 我懷疑Report.error()
被不當調用。
在我的情況下,使用常量BAD_CDATA_CONTENT
調用error()
。 此常量僅由Report.warning()
。 error()
不知道如何處理它,只是安靜地退出,根本沒有任何消息 。 如果將Lexer.getCDATA()
的調用從error()
更改為warning()
,則將獲得錯誤的確切行和列。 (我也得到了看上去格式合理的XHTML,而不是空文檔。)
我會向JTidy項目提交票證並提供一些建議,但是出於某些原因,SourceForge不允許我登錄。 所以在這里:
script
元素內的注釋;應該不會造成任何傷害。為防萬一, 我問了另一個問題 。) Report.error()
應該有一個默認情況,如果它得到一個,它將報告未處理的錯誤代碼。 希望這可以幫助其他任何有我猜測是深奧的問題的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.