2012-11-13 53 views
2

我使用Html.fromHtml()解析html。我的問題是我的HTML文本有YouTube的嵌入式鏈接(基本上標籤)TagHandler處理YouTube標籤<iframe>?

所以,既然Html類不支持標籤,我需要定義自己的TagHandler來處理它。我想要做的是將轉換爲常規的<a>標籤,以便它可以正確呈現。

//convert this 
<iframe src="http://www.youtube.com/embed/xAEdMI2ZE88" frameborder="0" width="560" height="315"></iframe> 
//To this 
<a href="http://www.youtube.com/embed/xAEdMI2ZE88">Click to Watch</a> 

我的問題是我無法找到一種方式來獲得從標籤在YouTube的src鏈接。

這裏是我的TagHandler的handleTag()方法:

@Override 
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) { 
    if (tag.equals("iframe")) { 
     if(opening) { 
      output.append("<a href="); 
      //How to get YouTube video link and append it? 
     } 
     else { 
      output.append("Click To Watch</a>"); 
     } 
    } 
} 

在此先感謝。

+2

爲什麼在傳遞給'Html.fromHtml()'之前不要在字符串中更改它? – CommonsWare

+0

我從來沒有想到這一點。但是使用'TagHandler'不是可行嗎?這不是它的工作嗎? – iTurki

+0

問題是,'TagHandler'的文檔是有限的,比方說。 :-)我懷疑你需要的數據是在'XMLReader'參數中,但是由於他們沒有說明在那裏會發生什麼,所以依賴它是有點冒險的。 – CommonsWare

回答

1

現在,我接受了CommonsWare的建議並修改了字符串before,將它傳遞給了Html.fromHtml

//Opening tag 
Pattern p = Pattern.compile("<iframe src"); 
Matcher m = p.matcher(htmlString); 
while (m.find()) 
    htmlString= m.replaceAll("<a href"); 

//Closing tag  
p = Pattern.compile("frameborder=.*</iframe>"); 
m = p.matcher(htmlString); 
while (m.find()) 
    htmlString= m.replaceAll(">CLICK TO WATCH</a>"); 
+0

直到somwone想出了一種使用'TagHandler'的方法,這將是公認的答案。 – iTurki

+0

不適用於我的情況,它只是顯示正常的字符串 –

1

你也可以使用這個正則表達式。

htmlString.replaceAll("<iframe\\s+.*?\\s+src=(\".*?\").*?<\\/iframe>", "<a href=$1>CLICK TO WATCH</a>");