Informa RSS - 类缺失错误,我做错了什么?

时间:2017-07-31 06:27:41

标签: xml parsing opml

我已经为从YouTube订阅的OPML文件提供了一些代码。代码来自Informa RSS here

当我运行代码时,我得到类缺少错误。唯一的参考我可以找到建议javaDOM版本可能是错误的,因为它已更新到DOM2.0但未能告诉我如何修复,它只是说使用较旧的版本并给出了javaDOM版本0.7的链接?

现在当我将JavaDOM 0.7安装到Netbeans库中时,错误消失,直到我尝试运行或编译它并且它失败了....

现在我不知道该去哪里。

我几天来一直在努力解决这个问题,我的主要问题是OPML文件具有所有相同的标签信息,即

<opml version="1.1">
<body>
    <outline text="YouTube Subscriptions" title="YouTube Subscriptions">
            <outline text="PersonOne" title="PersonOne" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCuNfoe7ozooi0LZgp6JJS4A" />
            <outline text="PersonTwo" title="PersonTwo" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCVErFSr-jdTa_QE4PPSkVJw" />
            <outline text="Person Three" title="Person Three" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCittVr8imKanO_5KohzDbpg" />
        </outline>
    </body>
</opml>

..并且没有足够的信息来说明如何在Java中处理这种标签组合,我已经搜索了三天......

1 个答案:

答案 0 :(得分:0)

我无法让Informa 0.7.0-alpha2阅读从YouTube导出为OPML文件的订阅。 OPML由一个outline元素组成,每个RSS订阅包含多个outline子元素。

Informa的OPMLParser类仅查看outline元素内的body元素,这是大多数OPML订阅列表的结构。它没有在outline内查找子outline元素。

作为替代解决方案,我使用了Java XML解析库XOM 1.12.10。以下是阅读YouTube生成的OPML文件的代码:

try {
    // create an XML builder
    Builder bob = new Builder();
    // build an XML document from the OPML file
    Document doc = bob.build(new File("subscription_manager.xml"));
    // get the root element
    Element opml = doc.getRootElement();
    // get root's body element
    Element body = opml.getFirstChildElement("body");
    // get body's outline element
    Element outline = body.getFirstChildElement("outline");
    // get outline's child outline elements
    Elements outlines = outline.getChildElements("outline");
    // loop through those elements
    for (int i = 0; i < outlines.size(); i++) {
        // display each RSS feed's URL
        System.out.println(outlines.get(i).getAttributeValue("xmlUrl"));
    }            
} catch (ParsingException | IOException ex) {
    System.out.println(ex.getMessage());
}

此代码包含以下导入:

import java.io.File;
import java.io.IOException;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Elements;
import nu.xom.ParsingException;