使用罗马API解析RSS提要我收到此错误:

com.sun.syndication.io.ParsingFeedException: Invalid XML
    at com.sun.syndication.io.WireFeedInput.build(WireFeedInput.java:210)

代码如下:

public static void main(String[] args) {
    URL url;
    XmlReader reader = null;
    SyndFeed feed; 

    try {
        url = new URL("https://www.democracynow.org/podcast.xml");
        reader = new XmlReader(url);
        feed = new SyndFeedInput().build(reader);
        for (Iterator<SyndEntry> i =feed.getEntries().iterator(); i.hasNext();) {
            SyndEntry entry = i.next();
            System.out.println(entry.getPublishedDate()+" Title  "+entry.getTitle());

        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

我检查了一些链接,例如:

http://old.nabble.com/Invalid-XML:-Error-on-line-1:-Content-is-not-allowed-in-prolog.-td21258868.html

问题可能出在字符集上,但我想不出一种实现此方法的方法。 任何帮助或指导都是高度赞赏的。

谢谢并恭祝安康,

瓦巴夫·高斯瓦米(Vaibhav Goswami)

===============>>#1 票数:1

我也正在使用联合发布,并且可以获得发布日期和标题。

我的代码如下:

URL feedUrl = new URL("http://www.bloomberg.com/tvradio/podcast/cat_markets.xml");

SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new XmlReader(feedUrl));

for (Iterator i = feed.getEntries().iterator(); i.hasNext();)
{
SyndEntry entry = (SyndEntry) i.next();
System.out.println("title |"+entry.getTitle()+"   " -timeStamp "+entry.getPublishedDate()"\n")
}

这可行,并且我使用Bloomberg Url只是因为它给了我XML。

如果您的查询还有其他问题,请告诉我:)

===============>>#2 票数:0

您可以使用SyndFeedSyndEntry来解析xml

另外,您还需要检查xml是否有效

URL url  = new URL("http://feeds.feedburner.com/javatipsfeed");
    XmlReader reader = null;
    try {
      reader = new XmlReader(url);
      SyndFeed feeder = new SyndFeedInput().build(reader);
      System.out.println("Feed Title: "+ feeder.getAuthor());
      for (Iterator i = feeder.getEntries().iterator(); i.hasNext();) {
        SyndEntry syndEntry = (SyndEntry) i.next();
        System.out.println(syndEntry.getTitle());
      }
      } finally {
            if (reader != null)
                reader.close();
      }

===============>>#3 票数:0

这是由于字节顺序标记问题 这是一个演示问题和解决方法的JUnit测试用例:

package rss;

import org.xml.sax.InputSource;

import java.io.*;
import java.net.*;

import com.sun.syndication.io.*;

import org.apache.commons.io.IOUtils;
import org.apache.commons.io.input.BOMInputStream;
import org.junit.Test;

public class RssEncodingTest {

    String url = "http://www.moneydj.com/KMDJ/RssCenter.aspx?svc=NH&fno=1&arg=X0000000";

    // This works because we use InputSource direct from the UrlConnection's InputStream

    @Test
    public void test01() throws MalformedURLException, IOException,
            IllegalArgumentException, FeedException {
        try (InputStream is = new URL(url).openConnection().getInputStream()) {
            InputSource source = new InputSource(is);
            System.out.println("description: "
                    + new SyndFeedInput().build(source).getDescription());
        }
    }

    // But a String input fails because the byte order mark problem

    @Test
    public void test02() throws MalformedURLException, IOException,
            IllegalArgumentException, FeedException {
        String html = IOUtils.toString(new URL(url).openConnection()
                .getInputStream());
        Reader reader = new StringReader(html);
        System.out.println("description: "
                + new SyndFeedInput().build(reader).getDescription());
    }

    // We can use Apache Commons IO to fix the byte order mark

    @Test
    public void test03() throws MalformedURLException, IOException,
            IllegalArgumentException, FeedException {
        String html = IOUtils.toString(new URL(url).openConnection()
                .getInputStream());
        try (BOMInputStream bomIn = new BOMInputStream(
                IOUtils.toInputStream(html))) {
            String f = IOUtils.toString(bomIn);
            Reader reader = new StringReader(f);
            System.out.println("description: "
                    + new SyndFeedInput().build(reader).getDescription());
        }
    }

}

  ask by vaibhav translate from so

未解决问题?本站智能推荐:

1回复

charset和rome(rss / atom feed)的问题

我正在尝试使用rome (1.0)创建一个feed聚合器。 一切正常,但我遇到饲料字符集的问题。 我正在使用java 1.6在mac os x(netbeans 6.9.1)上开发它。 我正在使用以下代码来检索Feed: 其中_source是RSS源(如http://rss.c
1回复

罗马无法获取RSS feed内容

我正在尝试使用Rome 1.7.4阅读RSS feed的内容。 这是我的代码: 我正在尝试获取提要的内容,但是它从未进入for content循环。 检查变量表示content = null。 我究竟做错了什么?
1回复

获取罗马图书馆的所有RSS feed条目

我正在使用Java的Rome库来解析一些RSS。 默认情况下,它需要25个条目。 请告诉我,如何获得下25个条目? 我的测试代码是: 谢谢!
1回复

Java-罗马:我正在尝试解析RSS feed,但在某些频道上出现错误

我正在尝试与rss一起解析。 我找到了罗马,并尝试通过代码使用它: 在http://feeds.bbci.co.uk/news/world/rss.xml等某些频道上,一切正常,但是在http://habrahabr.ru/rss/等其他频道上,我得到了错误: 我看了看此链接后
1回复

罗马RSS无法解析附件

我尝试用罗马创建带有附件的rss Feed(用于播客)。 所以我创建一个条目 设置条目的基本信息(如“标题”和“链接”)后,我要设置带有媒体文件的附件。 但是当我用以下命令输出RSS文件时 附件未出现在RSS文件中。
1回复

RSS Feed-解析结束标记异常时

我正在使用rome-1.5.jar来解析RSS Feed。 但是,当它解析某些rss feed时,会给出关闭元标记的错误。 RSS订阅链接: 纽约时报RSS订阅链接 这是代码 这是例外 我在这段代码中做错了吗? 请帮助我解决此错误。
2回复

定期更新罗马的RSS提要

我将如何去获取罗马的故事。 即我有提要如何获取提要的更新版本。 我目前正在致电:
1回复

罗马RSS-禁用罗马RSS中的验证

在我的应用程序中,ROME api尝试针对W3C中的提要和DTD验证提要,并且一段时间后失败,因为W3C阻止了该IP。 有没有一种方法可以在ROME中禁用XML提要验证? 不需要RSS XML验证,因为我们从一家知名公司获得了提要
4回复

用罗马图书馆获取rss的图片网址

我有一个rss文件如下: 我想得到图片的网址。 我使用罗马库但没找到任何解决方案。 如何在罗马图书馆的项目中获取图片的网址?
1回复

通过ROME解析的RSS feed获得null作为源

我正在使用com.sun.syndication api解析RSS提要,最终需要在我的应用程序中使用它。 我面临的问题是对于某些RSS,例如 如果我们有带有某些值的标记,则以下代码将null用作源。 有人对我可能在这里想念的东西有任何想法吗