(我不知道如何正确地标记我的问题所以不要介意标题)。
我正在研究一个java DOM Parser来解析一个rss feed并输出一个文件(.xml)。除一个主要部分外,它都有效。 (它为某些部分使用Jsoup)
在<content:encoded>
标记(文章正文)中,它必须将所有<iframe>
标记更改为<a>
标记,并将其可视部分设置为视频的缩略图包含在iframe标记中。
这是转换标签并更改标签html的代码。
String html = theString;
org.jsoup.nodes.Document docHtml = Jsoup.parse(html);
Elements body = docHtml.select("body");
Elements iframes = body.select("iframe");
iframes.tagName("a");
iframes.removeAttr("width");
iframes.removeAttr("height");
iframes.removeAttr("allowfullscreen");
iframes.removeAttr("frameborder");
//iframes.attr("href", youtubeURL);
for(int k=0; k<1; k++) {
String[] array;
String[] array1;
array = new String[10];
array1 = new String[10];
String youtubeID = "";
String link = "";
array[k] = iframes.attr("src");
//System.out.println(array[k]);
String pattern = "(?<=watch\\?v=|/embed/)[^&#]*";
Pattern compiledPattern = Pattern.compile(pattern);
Matcher matcher = compiledPattern.matcher(array[k]);
while(matcher.find()){
array1[k] = matcher.group();
//System.out.println(matcher.group());
//This is the line in question
iframes.html("<img src=\"http://img.youtube.com/vi/"+array1[k]+"/0.jpg\"/></br>Tap to play video");
System.out.println(iframes);
}
所有解析都有效,我可以使用正则表达式从iframe标记中成功获取Youtube ID。但如果帖子有多个视频,而不是插入所有正确的ID,它只会插入该帖子中第一个视频的ID。
而不是(请原谅格式化)
a src="http://www.youtube.com/embed/5CzKyR6jzyw"><img src="http://img.youtube.com/vi/5CzKyR6jzyw/0.jpg" /><br />Tap to play video</a>
它给出了(注意img src属性)
<a src="http://www.youtube.com/embed/qxur7H_CtM0"><img src="http://img.youtube.com/vi/qxur7H_CtM0/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/nQl1Y5suqP4"><img src="http://img.youtube.com/vi/qxur7H_CtM0/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/H47WhjHcBSw"><img src="http://img.youtube.com/vi/qxur7H_CtM0/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/UMr6_ODZsFg"><img src="http://img.youtube.com/vi/qxur7H_CtM0/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/u8qzrBcont8"><img src="http://img.youtube.com/vi/qxur7H_CtM0/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/0283IhwTWd4"><img src="http://img.youtube.com/vi/qxur7H_CtM0/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/HOgnsaixbwE"><img src="http://img.youtube.com/vi/qxur7H_CtM0/0.jpg" /><br />Tap to play video</a>
我很确定这是非常简单的事情,我只是错过了它。
编辑:感谢无关的(用于修复格式)
再次,请原谅我缺乏细节和/或让一些非常简单的声音令人困惑,但我不知道如何恰当地表达手头的问题。
答案 0 :(得分:0)
解决了!
我改变了Jsoup获取URL的方式。之前,它只获取第一个元素的URL,我忽略了它。
所以我改变了
array[k] = iframes.attr("src");
为:
for (Element e : body.select("iframe")) {
//This gets individual elements, rather than the first one of each post.
array[k] = e.attr("src");
String pattern = "(?<=watch\\?v=|/embed/)[^&#]*";
Pattern compiledPattern = Pattern.compile(pattern);
Matcher matcher = compiledPattern.matcher(array[k]);
while(matcher.find()){
array1[k] = matcher.group();
e.html("<img src=\"http://img.youtube.com/vi/"+array1[k]+"/0.jpg\"/></br>Tap to play video");
//System.out.println(iframes);
}
(还有其他更改,但这来自原帖中提到的代码)。
现在它输出(就像它应该的那样,但显然我把它改为src
属性为href
,其他明智的做法是愚蠢和反效果):
<a src="http://www.youtube.com/embed/qxur7H_CtM0"><img src="http://img.youtube.com/vi/qxur7H_CtM0/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/nQl1Y5suqP4"><img src="http://img.youtube.com/vi/nQl1Y5suqP4/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/H47WhjHcBSw"><img src="http://img.youtube.com/vi/H47WhjHcBSw/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/UMr6_ODZsFg"><img src="http://img.youtube.com/vi/UMr6_ODZsFg/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/u8qzrBcont8"><img src="http://img.youtube.com/vi/u8qzrBcont8/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/0283IhwTWd4"><img src="http://img.youtube.com/vi/0283IhwTWd4/0.jpg" /><br />Tap to play video</a>
<a src="http://www.youtube.com/embed/HOgnsaixbwE"><img src="http://img.youtube.com/vi/HOgnsaixbwE/0.jpg" /><br />Tap to play video</a>