数组在输出上重复数据

时间:2012-12-28 07:17:37

标签: java jsoup domparser

(我不知道如何正确地标记我的问题所以不要介意标题)。

我正在研究一个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>

我很确定这是非常简单的事情,我只是错过了它。

编辑:感谢无关的(用于修复格式)

再次,请原谅我缺乏细节和/或让一些非常简单的声音令人困惑,但我不知道如何恰当地表达手头的问题。

1 个答案:

答案 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>