gpt4 book ai didi

java - BlackBerry 中的 RSS/XML 解析

转载 作者:行者123 更新时间:2023-11-29 03:42:52 25 4
gpt4 key购买 nike

我正在开发一个 RSS 阅读器应用程序,我需要在其中读取和显示部分数据。从 url https://twitter.com/statuses/user_timeline/27756405.rss 获取的数据中只需要提取 titlelink 数据.

我在解析 xml 时遇到问题,需要有关此问题的帮助。

我的代码附在下面。

public class RssMain extends UiApplication {
RssMain theApp;

public static void main(String[] args) {
// create an instance of our app
RssMain theApp = new RssMain();
// "run" the app
theApp.enterEventDispatcher();
}

// app constructor
public RssMain() {
// create an instance of the main screen of our application
RssScreen screen = new RssScreen();
// make the screen visible
UiApplication.getUiApplication().pushScreen(screen);
}

class RssScreen extends MainScreen {

public RssScreen() {
String rssUrl = "http://twitter.com/statuses/user_timeline/27756405.rss";
String[][] urlData = RSSHandler.getURLFromRSS(rssUrl);
for (int i = 0; i < urlData.length; i++) {
String title = urlData[0][i];
String url = urlData[1][i];
System.out.println("TITLE " + title);
System.out.println("URL " + url);

}
}
}
}


RSSHandler 的实现

import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import net.rim.blackberry.api.browser.Browser;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.util.Arrays;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

class RSSHandler extends DefaultHandler {
boolean isItem = false;
boolean isTitle = false;
boolean isLink = false;
String[] title = new String[] {};
String[] link = new String[] {};
String value = "";

public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
if (!isItem) {
if (name.equalsIgnoreCase("item"))
isItem = true;
} else {
if (name.equalsIgnoreCase("title"))
isTitle = true;
if (name.equalsIgnoreCase("link"))
isLink = true;
}
}

public void characters(char[] ch, int start, int length) throws SAXException {
if (isTitle || isLink) {
value = value.concat(new String(ch, start, length));
}
}

public void endElement(String uri, String localName, String name) throws SAXException {
if (isItem && name.equalsIgnoreCase("item")) {
isItem = false;
}
if (isTitle && name.equalsIgnoreCase("title")) {
isTitle = false;
Arrays.add(title, value);
value = "";
}
if (isLink && name.equalsIgnoreCase("link")) {
isLink = false;
Arrays.add(link, value);
value = "";
}
}

public static String[][] getURLFromRSS(String url) {
InputStream is = null;
HttpConnection connection = null;
RSSHandler rssHandler = new RSSHandler();
try {
connection = (HttpConnection) Connector.open(url);
is = connection.openInputStream();
try {
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
parser.parse(is, rssHandler);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (is != null)
is.close();
if (connection != null)
connection.close();

} catch (IOException e) {
e.printStackTrace();
}
}
String[][] result = new String[2][];
result[0] = rssHandler.title;
result[1] = rssHandler.link;
return result;
}
}

最佳答案

我使用与您的原理几乎相同的原理构建了一个非常粗略的应用程序,它正确地从以下位置加载数据:http://twitter.com/statuses/user_timeline/27756405.rss

请记住,这只是一个非常粗略的编辑。我目前无法访问黑莓开发工具,因此我已将其转换为独立的 Java 应用程序,但如果您更改它以适应您的黑莓应用程序,它应该可以正常工作。请注意在 parseRssData 方法中从 HttpConnection 切换到 URL,您可能必须将其切换回黑莓。

RssMain

public class RssMain {
public static final String DEFAULT_URL = "http://twitter.com/statuses/user_timeline/27756405.rss";

public static void main( String[ ] args ) {
RssItem[ ] items = parseRssData( DEFAULT_URL );
for( RssItem item : items ) System.out.println( "Title: " + item.title( ) + " | Link: " + item.link( ) );
}

public static RssItem[ ] parseRssData( String url ) {
URL u;
InputStream in = null;
RssHandler handler = new RssHandler( );

try {
u = new URL( url );
in = u.openStream( );

SAXParser parser = SAXParserFactory.newInstance( ).newSAXParser( );
parser.parse( in, handler );
} catch( Exception cause ) {
cause.printStackTrace( );
}

return handler.items.toArray( new RssItem[ 0 ] );
}
}

RSS处理器

public class RssHandler extends DefaultHandler {
public final ArrayList< RssItem > items;

private boolean isItem = false;
private boolean isTitle = false;
private boolean isLink = false;

String value = "";
RssItem current = null;

public RssHandler( ) {
items = new ArrayList< RssItem >( );
}

@Override
public void startElement( String uri, String localName, String name, Attributes attributes ) throws SAXException {
if( !isItem && name.equalsIgnoreCase( "item" ) ) isItem = true;
else {
if( name.equalsIgnoreCase( "title" ) ) isTitle = true;
if( name.equalsIgnoreCase( "link" ) ) isLink = true;
}
}

@Override
public void endElement( String uri, String localName, String name ) {
if( isItem && name.equalsIgnoreCase( "item" ) ) isItem = false;
else if( isTitle || isLink ) {
if( current == null ) current = new RssItem( );

if( name.equalsIgnoreCase( "title" ) ) {
isTitle = false;
current.title( value );
} else if( name.equalsIgnoreCase( "link" ) ) {
isLink = false;
current.link( value );
}

value = "";
if( ( current.title( ) != null ) && ( current.link( ) != null ) ) {
items.add( current );
current = null;
}
}
}

@Override
public void characters( char[ ] chars, int start, int length ) throws SAXException {
if( isTitle || isLink ) value = value.concat( new String( chars, start, length ) );
}
}

RSS 项

public class RssItem {
private String title;
private String link;

public String title( ) {
return title;
}

public RssItem title( String title ) {
this.title = title;
return this;
}

public String link( ) {
return link;
}

public RssItem link( String link ) {
this.link = link;
return this;
}
}

关于java - BlackBerry 中的 RSS/XML 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328396/

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