2012-10-31 56 views
4

任何人都可以幫助從Java中使用Jsoup從HTML中提取CSS樣式。 對於e.g在下面的HTML我想提取.ft00和.ft01在JAVA中使用JSOUP從HTML中提取CSS樣式

<HTML> 
<HEAD> 
<TITLE>Page 1</TITLE> 

<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<DIV style="position:relative;width:931;height:1243;"> 
<STYLE type="text/css"> 
<!-- 
    .ft00{font-size:11px;font-family:Times;color:#ffffff;} 
    .ft01{font-size:11px;font-family:Times;color:#ffffff;} 
--> 
</STYLE> 
</HEAD> 
</HTML> 

回答

4

如果樣式嵌入在你的元素,你只需要使用.attr("style")

JSoup不是一個Html渲染器,它只是一個HTML解析器,所以你將不得不解析檢索到的<style>標籤html內容的內容。你可以使用一個簡單的正則表達式;但在任何情況下都不起作用。您可能需要爲此任務使用CSS分析器。

public class Test { 
    public static void main(String[] args) throws Exception { 
     String html = "<HTML>\n" + 
       "<HEAD>\n"+ 
       "<TITLE>Page 1</TITLE>\n"+ 
       "<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"+ 
       "<DIV style=\"position:relative;width:931;height:1243;\">\n"+ 
       "<STYLE type=\"text/css\">\n"+ 
       "<!--\n"+ 
       " .ft00{font-size:11px;font-family:Times;color:#ffffff;}\n"+ 
       " .ft01{font-size:11px;font-family:Times;color:#ffffff;}\n"+ 
       "-->\n"+ 
       "</STYLE>\n"+ 
       "</HEAD>\n"+ 
       "</HTML>"; 

     Document doc = Jsoup.parse(html); 
     Element style = doc.select("style").first(); 
     Matcher cssMatcher = Pattern.compile("[.](\\w+)\\s*[{]([^}]+)[}]").matcher(style.html()); 
     while (cssMatcher.find()) { 
      System.out.println("Style `" + cssMatcher.group(1) + "`: " + cssMatcher.group(2)); 
     } 
    } 
} 

將輸出:

Style `ft00`: font-size:11px;font-family:Times;color:#ffffff; 
Style `ft01`: font-size:11px;font-family:Times;color:#ffffff; 
+0

非常感謝亞歷克斯,很好的解決方案 –