2012-11-13 3 views
2

나는 Html.fromHtml()을 사용하여 html을 파싱 중입니다. 내 문제는 내 HTML 텍스트가 Html 클래스 <iframe> 태그를 지원하지 않기 때문에Youtube 태그를 처리하는 TagHandler <iframe>?

그래서, 나는 그것을 처리하기 위해 자신의 TagHandler 내 정의 할 필요가 유튜브 임베디드 링크 (기본적으로 <iframe> 태그)를 가지고 있다는 것입니다. 내가하려고하는 것은 을 일반 <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> 

내 문제는 내가 <iframe> 태그에서 유튜브의 src 링크를 얻을 수있는 방법을 찾을 수 없습니다 것입니다. 사전에

@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>"); 
     } 
    } 
} 

감사 : 여기

내 TagHandler의 handleTag() 방법이다.

+2

'Html.fromHtml()'에 전달하기 전에 문자열에서 변경하지 않으시겠습니까? – CommonsWare

+0

나는 그것을 결코 생각하지 못했습니다. 하지만'TagHandler'를 사용하면 할 수 없을까요? 그 일이 아닌가? – iTurki

+0

문제는'TagHandler'의 문서가 제한적이라는 것입니다. :-) 나는 당신이 필요로하는 데이터가'XMLReader' 매개 변수에 있다고 생각하지만, 거기에서 기대할 것을 말하지 않기 때문에, 그것에 의존하는 것이 약간 위험하다. – CommonsWare

답변

1

저는 지금은 CommonsWare 조언을 받아서 beforeHtml.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>"); 
관련 문제