0

さて、私は RSSParsing で別の問題に遭遇しました。

これが私がこれまでに行ったことです。
必要な RSSFeed のデータに正常にアクセスできました。
その中の情報を (私の知る限り) 問題なく Item クラス オブジェクトに格納しました。このクラスは、タイトル、説明、リンク、公開日を受け取ります。

public class Item {

private String link;
private String title;
private String pubDate;
private String description;

// Default Constructor 

public Item()
{
    link = new String();
    title = new String();
    pubDate = new String();
    description = new String();

}

// Parameterized Constructor
public Item(String iTitle, String iDescription, String iLink, String iPubDate)
{
    link = iLink;
    title = iTitle;
    pubDate = iPubDate;
    description = iDescription;
}

public void setDate(String newPubDate)
{
    pubDate = newPubDate;
}

public void setLink(String newLink)
{
    link = newLink;
}

public void setTitle(String newTitle)
{
    title = newTitle;
}

public void setDescription(String newDescription)
{
    description = newDescription;
}

public String getDate()
{
    return pubDate;
}

public String getLink()
{
    return link;
}

public String getTitle()
{
    return title;
}

public String getDescription()
{
    return description;
}

public String toString()
{
    return "Title: " + title + "\n" + "Publication Date: " + pubDate + "\n" + "Description: " + description + "\n" + "Link: " + link;
}



以下は私のRSSParserハンドラクラスです

import org.xml.sax.Attributes;
import lists.LinkedUnorderedList;
import org.xml.sax.helpers.DefaultHandler;

public class RSSParser extends DefaultHandler{

int itemCount = 0;

boolean item = false;
boolean link = false;
boolean title = false;
boolean pubDate = false;
boolean description = false; 

Item theItem = new Item();
String itemPubDate = new String();


LinkedUnorderedList<Item> theUnorderedList = new LinkedUnorderedList();


public void startDocument()
{
    System.out.println("Starts Parsing the Document.....\n");

}


public void endDocument()
{
    System.out.println(theUnorderedList + "\n\n" + itemCount);
    System.out.println("\nEnds parsing Document...");

}


public void startElement(String nameSpaceURI, String localName, String qName, Attributes atts)
{

    if (qName.equalsIgnoreCase("item"))
    {
        theUnorderedList.addToRear(theItem);
        theItem = new Item();
        itemCount++;
    }
    else if ( qName.equalsIgnoreCase("link") )
    {
        link = true;
    }
    else if ( qName.equalsIgnoreCase("title") )
    {
        title = true;
    }
    else if ( qName.equalsIgnoreCase("pubDate") )
    {
        pubDate = true;
    }
    else if ( qName.equalsIgnoreCase("description") )
    {
        description= true;
    }

}




public void endElement(String nameSpaceURI, String localName, String qName, Attributes atts)
{
    System.out.print("End Element: " + qName );
}



public void characters(char[] ch, int start, int length)
{

    if ( title )
    {
        //System.out.println("Title: "  + new String( ch, start, length ) );
        theItem.setTitle( new String( ch, start, length ) );
        title = false;
    }

    else if ( link )
    {
        //System.out.println("Link: "  + new String( ch, start, length ) );
        theItem.setLink( new String( ch, start, length ) );
        link = false;
    }

    else if ( description )
    {
        //System.out.println("Description: "  + new String( ch, start, length ) );
        theItem.setDescription( new String( ch, start, length ) );
        description = false;
    }

    else if ( pubDate )
    {
        itemPubDate = new String( ch, start, length );

        //System.out.println("PubDate: "  + itemPubDate  + "\nItemCount: " + itemCount + "\n\n");
        theItem.setDate( new String( ch, start, length ) );
        pubDate = false;
    }

} // ends characters Method



最後は私の Application クラスです

//import java.net.URL;
//import java.util.Scanner;
import java.io.IOException;
import org.xml.sax.XMLReader;
import org.xml.sax.SAXException;
//import java.io.InputStreamReader;
import org.xml.sax.helpers.XMLReaderFactory;


public class Project4 {

public static void main (String [] args) throws IOException, SAXException
{

    XMLReader read = XMLReaderFactory.createXMLReader();

    RSSParser parser= new RSSParser();

    read.setContentHandler(parser);

    read.parse("http://feeds.ign.com/ign/games-articles");



} // Ends main 

}



これはこれまでのところ機能します。コメント付きのコードは、リンクされたリストに保存したアイテムのリストを印刷するという、私が望んでいたものを印刷しました。

私の主な目標は、これらすべての項目を正しく行った UnorderedLinkedList に入れることです。しかし、私の質問は、アプリケーション クラスでこのリストへのアクセス権をユーザーに与えるにはどうすればよいかということです。たとえば、リストからアイテムを削除するオプションをユーザーに提示できるようにしたいと考えています。リンクされたリストのメソッドと GUI の作成方法は知っていますが、明確にするために、アプリケーション クラスからこのリストにアクセスする方法はわかりません。または、間違った場所に LinkedList を作成していますか?

ありがとう

4

1 に答える 1

0

代わりに RSSParser を Project4 クラスの変数に移動し、それにアクセスするメソッドを提供する必要があります。静的メイン メソッドは、Project4 のインスタンスをインスタンス化し、新しい RSSParser() を作成する必要があります。そのインスタンスを使用してフィードを解析し、getter メソッドを作成して GUI からアクセスできるようにします。

たとえば、次のようなものです。

public class Project4 {

  private parser RSSParser;

  public RSSParser getParser() {
     return parser
  }

  public static void main (String [] args) throws IOException, SAXException {

     Project4 p = new Project4();
     XMLReader read = XMLReaderFactory.createXMLReader();
     p.parser= new RSSParser();
     read.setContentHandler(p.parser);
     read.parse("http://feeds.ign.com/ign/games-articles");

     /// loop here and connect up your GUI

  }

}

余談ですが、RSS フィードを解析するための ROME プロジェクトを参照してください。

于 2013-05-09T13:21:46.793 に答える