我已经为从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中处理这种标签组合,我已经搜索了三天......
答案 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;