2012-04-11 102 views
4

我想分析一個網頁的DOCTYPEJsoup發現HTML的版本(HTML 5HTML 4XHTML等)。是否可以使用Jsoup解析DOCTYPE來發現HTML版本?

可以解析DOCTYPEJsoup處理呢?如果不是,那麼有一種方法可以實現發現頁面HTML版本的主要目標?

+1

什麼是你的用例?使用Doctype的大多數網站不符合相關規範是否重要? – Quentin 2012-04-11 14:07:32

+0

@Quentin不,沒關係。唯一重要的是僅使用HTML 5的頁面。其他情況僅用於DOCTYPE中聲明的內容。 – 2012-04-11 14:09:10

+0

如果它們符合要求並不重要,如果它們使用HTML 5 Doctype,爲什麼它很重要?如果你只關心使用HTML 5 Doctype的話,爲什麼不用字符串匹配呢? – Quentin 2012-04-11 14:10:25

回答

8

Jsoup有此目的DocumentType類:

List<Node>nods = doc.childNodes(); 
     for (Node node : nods) { 
      if (node instanceof DocumentType) { 
       DocumentType documentType = (DocumentType)node; 
        System.out.println(documentType.toString()); 
        System.out.println(DocumentType.attr("publicid")); 
      } 
     } 
+0

你能夠檢測到版本,即HTML5或HTML4.0或其他? 我得到'<!DOCTYPE html PUBLIC \「 - // W3C // DTD HTML 4.01 Transitional // EN \」\「http://www.w3.org/TR/html4/loose.dtd \」>對於html5,請使用html4.01 和'<!doctype html>'。 所以問題是我需要匹配這個字符串,並說它是html5 ot html4.01? – virsha 2017-03-18 14:04:30

+2

我沒有這樣說: '私人字符串getHtmlVersion(文檔文件){ \t \t列表節點= document.childNodes(); \t \t返回nodes.stream()過濾器(節點 - >節點的instanceof DocumentType).MAP(此:: generateHtmlVersion) \t \t \t \t .collect(Collectors.joining())。 \t}' 和generateHtmlVersion看起來像這樣 '私人字符串generateHtmlVersion(節點節點){ \t \t DocumentType documentType =(DocumentType)節點; \t \t String htmlVersion = documentType.attr(「publicid」); \t \t return「」.equals(htmlVersion)? Constants.HTML_5_VERSION:htmlVersion; \t}' @vacuum您的答案幫助** + 1 ** – virsha 2017-03-19 20:29:19