gpt4 book ai didi

java - 帮助解析 RSS 提要。所有元素返回 null

转载 作者:行者123 更新时间:2023-12-01 05:43:39 27 4
gpt4 key购买 nike

我正在尝试解析一个 rss feed,它似乎获取了所有节点,但没有获取任何子元素,它们都返回 null。

Java代码:

package com.nasutek.sliceoftech;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class RSSParser {
private ArrayList<RSSPost> rssposts;
private DocumentBuilderFactory factory;
private DocumentBuilder builder;
public RSSParser() {
this.rssposts = new ArrayList<RSSPost>();
}

private String getNodeValue(NamedNodeMap map, String key) {
String nodeValue = null;
Node node = map.getNamedItem(key);
if (node != null) {
nodeValue = node.getNodeValue();
}
return nodeValue;
}
public List<RSSPost> getList() {
return this.rssposts;
}
public void parse(InputStream inStream) {
try {
this.rssposts = new ArrayList<RSSPost>();
this.factory = DocumentBuilderFactory.newInstance();
this.builder = this.factory.newDocumentBuilder();
this.builder.isValidating();
Document doc = this.builder.parse(inStream, null);

doc.getDocumentElement().normalize();

NodeList itemList = doc.getElementsByTagName("item");
final int length = itemList.getLength();

for (int i = 0; i < length; i++) {
final NamedNodeMap attr = itemList.item(i).getAttributes();
final String rss_title = getNodeValue(attr, "title");
final String rss_link = getNodeValue(attr, "link");
final String rss_pubDate = getNodeValue(attr, "pubDate");
final String rss_creator = getNodeValue(attr, "dc:creator");
final String rss_sharelink = getNodeValue(attr, "guid");
final String rss_description = getNodeValue(attr, "description");
final String rss_content = getNodeValue(attr, "content:encoded");
final String rss_thumbnail = itemList.item(i).getNodeName();

RSSPost post = new RSSPost(rss_title,rss_link,rss_pubDate,rss_creator,rss_sharelink,rss_description,rss_content,rss_thumbnail);

if (post.title != null) this.rssposts.add(post);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

RSS 源:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
>

<channel>
<title>Slice of Tech &#187; Search Results &#187; Google</title>
<atom:link href="http://www.sliceoftech.com/feed?s=Google" rel="self" type="application/rss+xml" />
<link>http://www.sliceoftech.com</link>
<description>Technology breaking news, reviews, and editorials</description>

<lastBuildDate>Fri, 24 Jun 2011 04:43:11 +0000</lastBuildDate>
<language>en</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>http://wordpress.org/?v=3.1.3</generator>
<item>

<title>Best Buy Joins the Music Cloud Bandwagon</title>
<link>http://www.sliceoftech.com/2011/06/best-buy-joins-the-music-cloud-bandwagon/</link>
<comments>http://www.sliceoftech.com/2011/06/best-buy-joins-the-music-cloud-bandwagon/#comments</comments>
<pubDate>Wed, 22 Jun 2011 05:59:18 +0000</pubDate>
<dc:creator>Kevin Nunez</dc:creator>
<category><![CDATA[Cloud]]></category>

<category><![CDATA[Best Buy]]></category>
<category><![CDATA[Cloud computing]]></category>

<guid isPermaLink="false">http://www.sliceoftech.com/?p=98</guid>
<description><![CDATA[So we&#8217;ve seen cloud music storing services from Amazon, Google, and Apple &#8211; all of which work great. Best Buy, however, has decided to join the mix and come up with a cloud service themselves. They rolled out their new service called Music Cloud that lets you upload your audio to their servers and stream [...]]]></description>
<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://www.sliceoftech.com/wp-content/uploads/2011/06/Screen-Shot-2011-06-22-at-1.57.13-AM.png"><br />
<img class="aligncenter size-full wp-image-99" title="Screen Shot 2011-06-22 at 1.57.13 AM" src="http://www.sliceoftech.com/wp-content/uploads/2011/06/Screen-Shot-2011-06-22-at-1.57.13-AM.png" alt="" width="550" height="194" /></a></p>
<p style="text-align: left;">So we&#8217;ve seen cloud music storing services from Amazon, Google, and Apple &#8211; all of which work great. Best Buy, however, has decided to join the mix and come up with a cloud service themselves. They rolled out their new service called Music Cloud that lets you upload your audio to their servers and stream it from wherever you are. You can also save songs locally, and there&#8217;s apps for Android, BlackBerry, and iOS to manage and play your music. There are two versions of the service &#8211; Lite and Premium. Lite is free while premium is $3.99 per month, but Best Buy hasn&#8217;t disclosed in their official blog post what pro users will get over the free guys. Also, the service only catches songs from iTunes and not from anywhere else, so for those who avoid iTunes at all costs (don&#8217;t blame ya), you&#8217;re outta luck.</p>
<p style="text-align: left;">Why Best Buy would do this is beyond me, but I guess they thought it would be a good move to make. When it rains, it pours, and it&#8217;s certainly very &#8220;cloudy&#8221; in the tech world. Will you use Best Buy&#8217;s cloud service?</p>
<p>[via <a href="http://news.yahoo.com/s/digitaltrends/20110621/tc_digitaltrends/bestbuysoftlaunchesmusiccloudservice">Yahoo News</a>]<br />
Source: <a href="http://www.bestbuymobile.com/article/inside-best-buy-music-cloud">Best Buy Blog</a></p>
]]></content:encoded>
<wfw:commentRss>http://www.sliceoftech.com/2011/06/best-buy-joins-the-music-cloud-bandwagon/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>

<enclosure url="http://www.sliceoftech.com/wp-content/uploads/2011/06/Screen-Shot-2011-06-22-at-1.57.13-AM-300x105.png" length="32141" type="image/jpg" /> </item>
</channel>
</rss>

最佳答案

看来你有点搞混了。您使用了 getAttributes 它返回元素的属性,在您的情况下是没有属性的 item 元素。如果您在 guid 元素上运行它,您将得到一个 isPermaLink 值。

此示例使我能够获取该项目的详细信息:

http://javamix.wordpress.com/2009/06/09/read-rss-feeds-using-jsp/

因此,我没有使用 getAttributes,而是使用了这一行:

final Element element = (Element)itemList.item(i);

然后获取一些数据是这样的:

final String rss_title = getElementValue(element, "title");

我只能在我的电脑上的 Eclipse 中运行它,因为我没有可用的 Android。我不明白为什么它不能在 Android 上运行。

关于java - 帮助解析 RSS 提要。所有元素返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6472359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com