2013-08-16 101 views
1

我錯過了什麼嗎?有一個更好的方法嗎?jSoup - 刪除特定的樣式屬性

INPUT:

<span style="FONT-FAMILY: 'Lucida Sans','sans-serif'; COLOR: #003572; FONT-SIZE: 9pt; 
mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; 
mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin">Dr. Who is 
<u>usually</u> available for consultations Mon - Thurs afternoons and Friday 9a- 
12p at 555-1212. </span> 

期望的輸出:

<跨度風格= 「COLOR:#003572; FONT-SIZE:9pt的;」>博士。誰是 <ü>通常是< /ü>可用於協商星期一 - 星期四 下午和星期五9a-12p在555-1212。 </SPAN >

到目前爲止我的代碼:

//清理爲期一週的筆記中的HTML寫入DB前

Whitelist wl = new Whitelist();   
    wl = Whitelist.simpleText(); 
    wl.addTags("br"); 
    wl.addTags("p"); 
    wl.addTags("span"); 
    wl.addAttributes(":all","style"); 
    Document doc = 
       Jsoup.parse(
       "<html><head></head><body>"+ds.getWeeklongNote()+"</body></html>"); 
    Elements e = doc.select("*"); 
    for (Element el : e){ 
     for (Attribute attr : el.attributes()){ 
      if (attr.getKey().equals("span")){ 
       String newValue = ""; 
       String s = attr.getValue(); 
       String[] values = s.split(";"); 
       for (String value : values){ 
        if (value.startsWith("COLOR")||value.startsWith("FONT-SIZE")){ 
         newValue += attr.getKey()+"="+attr.getValue()+";"; 
        } 
       } 
       attr.setValue(newValue); 
      } 
     } 
    } 

    doc.html(e.outerHtml()); 
    ds.setWeekLongNote(Jsoup.clean(doc.body().outerHtml(), wl)); 
+0

'Jsoup.parse(「'標籤有什麼用? –

+0

很好的捕獲,但不是我一直在尋找。由於STYLE是一個實質上接受數組作爲其值的屬性,是否有一種**更好的方式來編輯STYLE標籤的內容,而不是我上面正在處理的內容? –

回答

1

試試這個:

Document doc = Jsoup.parse(html); 
    Elements e = doc.getElementsByTag("body");    
    Log.i("Span element: "+e.get(0).nodeName(), ""+e.get(0).nodeName()); 
    e = e.get(0).getElementsByTag("span"); 
    Attributes styleAtt = e.get(0).attributes(); 
    Attribute a = styleAtt.asList().get(0);   
    if(a.getKey().equals("style")){ 
    String[] items = a.getValue().trim().split(";"); 
    String newValue = ""; 
    for(String item: items){ 

     if(item.contains("COLOR:")||item.contains("FONT-SIZE:")){ 
      Log.i("Style Item: ", ""+item); 
      newValue = newValue.concat(item).concat(";"); 
     } 
    } 
    a.setValue(newValue); 
    Log.i("New Atrrbute: ",""+newValue);      
    } 

    Log.i("FINAL HTML: ",""+e.outerHtml()); 

    doc.html(e.outerHtml()); 
    } 

Out放:

08-17 18:28:07.692: I/FINAL HTML:(8148): <span style=" COLOR: #003572; FONT-SIZE: 9pt;">Dr. Who is <u>usually</u> available for consultations Mon - Thurs afternoons and Friday 9a- 12p at 555-1212. </span>

乾杯,

0

如果你有,你可以使用此代碼段不止一個span元素:

Document document = Jsoup.parse(html); 

    Vector<String> allowedItems = new Vector<String>(); 
    allowedItems.add("color"); 
    allowedItems.add("font-size"); 

    Elements e = document.getElementsByTag("span"); 
    for (Element element : e) { 
     String[] styles = element.attr("style").split(";"); 
     Vector<String> filteredItems = new Vector<String>(); 
     for (String item : styles) { 
      String key = (item.split(":"))[0].trim().toLowerCase(); 
      if (allowedItems.contains(key)){ 
       filteredItems.add(item); 
      } 
     } 
     if(filteredItems.size() == 0){ 
      element.removeAttr("style");   
     }else{ 
      element.attr("style",StringUtils.join(filteredItems, ";")); 
     } 
    } 
-2
//remove style attribute 
    Elements elms = doc.select("*").not("img"); 
    for (Element e : elms) { 
     String attr = e.attr("style"); 
     if(!"".equals(attr) || null!=attr){ 
      e.attr("style", ""); 
     } 
    } 
+0

請格式化您的代碼。 – Danh

+0

對你的方法的解釋將比只是一堆代碼更好。你介意告訴我們更多關於你在這裏做什麼的嗎? –