Rss4j
日本語 | 豪華蜘蛛の巣場要約ジャバ用 |
英語 | RSS for Java |
ふりがな | あーるえすえすふぉーじゃば |
フリガナ | アールエスエスフォージャバ |
RSS用XMLを作成・解析するためのライブラリ。
RSSはXML形式だが、それをDOM等を使用して作成する場合、RSSのフォーマットを調べてそれに合わせて作成する必要がある。
Rss4jは、タイトル・要約文・URL等を設定することでXMLを出力するため、簡単にRSS用XMLを作成することができる。
出力先は、Fileクラスを指定することでファイルを出力先にすることができる。また、OutputStreamクラスのサブクラス、Writerクラスのサブクラスも指定できるため、バイト出力ストリームや文字出力ストリームも対象とすることができる。
また、Rss4jは他のXMLファイルを読み込み解析(パーシング)することもできる。RSSは、他のRSSを取り込みまとめ直したRSSを作成する場合もあるため、その場合にはこの機能を利用して解析・再構築する。
RSSはXML形式だが、それをDOM等を使用して作成する場合、RSSのフォーマットを調べてそれに合わせて作成する必要がある。
Rss4jは、タイトル・要約文・URL等を設定することでXMLを出力するため、簡単にRSS用XMLを作成することができる。
出力先は、Fileクラスを指定することでファイルを出力先にすることができる。また、OutputStreamクラスのサブクラス、Writerクラスのサブクラスも指定できるため、バイト出力ストリームや文字出力ストリームも対象とすることができる。
また、Rss4jは他のXMLファイルを読み込み解析(パーシング)することもできる。RSSは、他のRSSを取り込みまとめ直したRSSを作成する場合もあるため、その場合にはこの機能を利用して解析・再構築する。
参考サイト
// Sample.java
import java.io.StringWriter;
import java.io.IOException;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import churchillobjects.rss4j.RssChannel;
import churchillobjects.rss4j.RssChannelItem;
import churchillobjects.rss4j.RssDocument;
import churchillobjects.rss4j.RssDublinCore;
import churchillobjects.rss4j.generator.RssGenerator;
import churchillobjects.rss4j.generator.RssGenerationException;
public class Sample
{
public static void main( String[] args )
{
/*
■Rss4jの使用方法
1.
http://www.churchillobjects.com/c/13005.html
から
rss4j092.ja
というファイルをダウンロードしてください。
2.
この解凍してください(このファイルを直接クラスパスに
追加しないでください。拡張子を.zipに変えて解凍すると
いいかもしれません)
3.
libフォルダにある以下のファイルをクラスパスに追加してください。
rss4j.jar
4.
Rss4jは、Xercesを使用しますのでこちらも準備する必要があります。
http://xml.apache.org/xerces-j/
から任意のファイル(たとえばXerces-J-bin.2.7.1.zip)ダウンロードして
ください。
5.
以下のファイルをクラスパスに加えてください。
xercesImpl.jar
xml-apis.jar
注:この2ファイルをクラスパスに加えないと、実行時に以下の例外が
投げられます。
・xercesImpl.jarがない場合
java.lang.NoClassDefFoundError: org/apache/xml/serialize/BaseMarkupSerializer
at Sample.main(Sample.java:133)
・xml-apis.jarがない場合
java.lang.NoClassDefFoundError: org/w3c/dom/ranges/DocumentRange
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
at churchillobjects.rss4j.generator.RssGenerator.<init>(RssGenerator.java:184)
at churchillobjects.rss4j.generator.RssGeneratorImpl090.<init>(RssGeneratorImpl090.java:49)
at churchillobjects.rss4j.generator.RssGeneratorImpl091.<init>(RssGeneratorImpl091.java:56)
at churchillobjects.rss4j.generator.RssGeneratorImpl100.<init>(RssGeneratorImpl100.java:45)
at churchillobjects.rss4j.generator.RssGenerator.getGenerator(RssGenerator.java:171)
at churchillobjects.rss4j.generator.RssGenerator.generateRss(RssGenerator.java:148)
at Sample.main(Sample.java:142)
*/
StringWriter stringWriter = null;
try
{
/* RSSのバージョン */
String VERSION = "1.0";
/** ホームページのタイトル */
String HOMEPAGE_TITLE = "テストのホームページ";
/** ホームページのURL */
String HOMEPAGE_URL = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html";
/** ホームページの説明 */
String HOMEPAGE_DESCRIPTION = "これはJavaA2Zの「RSS」単語のテストです。";
/** RSSのURI */
String HOMEPAGE_RSS_URI = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss";
/** RSSの言語 */
String HOMEPAGE_LANG = "ja";
/** コピーライト表記 */
String HOMEPAGE_COPYRIGHT = "(C)KAB-studio 2005 ALL RIGHTS RESERVED";
/** RSS 日付フォーマット。 */
String RSS_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'+09:00'";
SimpleDateFormat FORMATTER = new SimpleDateFormat( RSS_DATE_TIME_FORMAT );
// RSSドキュメントを作成。
RssDocument rssDocument = new RssDocument();
// バージョンはRSS1.0にします。
rssDocument.setVersion( VERSION );
// チャンネルの基本情報をセット。
RssChannel rssChannel = new RssChannel();
rssChannel.setChannelTitle( HOMEPAGE_TITLE );
rssChannel.setChannelLink( HOMEPAGE_URL );
rssChannel.setChannelDescription( HOMEPAGE_DESCRIPTION );
rssChannel.setChannelUri( HOMEPAGE_RSS_URI );
rssChannel.setChannelLanguage( HOMEPAGE_LANG );
rssChannel.setChannelCopyright( HOMEPAGE_COPYRIGHT );
// チャンネルの基本情報の方にも Dublin Core をセット。
RssDublinCore rssDublinCoreForChannel = new RssDublinCore();
rssDublinCoreForChannel.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) );
// date: 2005-11-24T19:49:28+09:00
rssChannel.setDublinCore( rssDublinCoreForChannel );
// これがないと
// 未宣言の名前空間の接頭語を参照します: 'dc'。リソース 'http://192.168.0.50/Programing/JavaA2Z/rss' の実行エラーです。ライン 24、位置 14
// <dc:date>2005-02-24T03:15:11+09:00</dc:date>
// ってエラーになります。
// アイテムをひとつ作ります。
RssChannelItem rssChannelItem = new RssChannelItem();
rssChannelItem.setItemTitle( "項目1:Writer" );
rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html" );
rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." );
// 日付情報としてDublin Coreをセットします。
RssDublinCore rssDublinCore = new RssDublinCore();
rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) ); // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。
// date: 2005-11-24T19:49:28+09:00
rssChannelItem.setDublinCore( rssDublinCore );
// アイテムをチャンネルに追加します。
rssChannel.addItem( rssChannelItem );
// もうひとつアイテムを作ります。
rssChannelItem = new RssChannelItem();
rssChannelItem.setItemTitle( "項目2:StringWriter" );
rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html" );
rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." );
// 日付情報としてDublin Coreをセットします。
rssDublinCore = new RssDublinCore();
rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) ); // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。
// date: 2005-11-24T19:49:28+09:00
rssChannelItem.setDublinCore( rssDublinCore );
// アイテムをチャンネルに追加します。
rssChannel.addItem( rssChannelItem );
// RssChannelをRssDocumentに追加します。
rssDocument.addChannel( rssChannel );
// 書き込みます。
stringWriter = new StringWriter();
RssGenerator.generateRss( rssDocument, stringWriter );
System.out.println( stringWriter.toString() );
/*
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<channel rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss">
<title>テストのホームページ</title>
<description>これはJavaA2Zの「RSS」単語のテストです。</description>
<link>http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html</link>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html"/>
<rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html"/>
</rdf:Seq>
</items>
<dc:date>2005-11-24T19:49:28+09:00</dc:date>
</channel>
<item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html">
<title>項目1:Writer</title>
<link>http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html</link>
<description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description>
<dc:date>2005-11-24T19:49:28+09:00</dc:date>
</item>
<item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html">
<title>項目2:StringWriter</title>
<link>http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html</link>
<description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description>
<dc:date>2005-11-24T19:49:28+09:00</dc:date>
</item>
</rdf:RDF>
*/
// ファイルに出力する場合は、これを
// UTF-8形式で出力すればいいでしょう。
}
catch( ParseException e )
{
e.printStackTrace();
}
catch( RssGenerationException e )
{
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( stringWriter != null )
{
stringWriter.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
}
import java.io.StringWriter;
import java.io.IOException;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import churchillobjects.rss4j.RssChannel;
import churchillobjects.rss4j.RssChannelItem;
import churchillobjects.rss4j.RssDocument;
import churchillobjects.rss4j.RssDublinCore;
import churchillobjects.rss4j.generator.RssGenerator;
import churchillobjects.rss4j.generator.RssGenerationException;
public class Sample
{
public static void main( String[] args )
{
/*
■Rss4jの使用方法
1.
http://www.churchillobjects.com/c/13005.html
から
rss4j092.ja
というファイルをダウンロードしてください。
2.
この解凍してください(このファイルを直接クラスパスに
追加しないでください。拡張子を.zipに変えて解凍すると
いいかもしれません)
3.
libフォルダにある以下のファイルをクラスパスに追加してください。
rss4j.jar
4.
Rss4jは、Xercesを使用しますのでこちらも準備する必要があります。
http://xml.apache.org/xerces-j/
から任意のファイル(たとえばXerces-J-bin.2.7.1.zip)ダウンロードして
ください。
5.
以下のファイルをクラスパスに加えてください。
xercesImpl.jar
xml-apis.jar
注:この2ファイルをクラスパスに加えないと、実行時に以下の例外が
投げられます。
・xercesImpl.jarがない場合
java.lang.NoClassDefFoundError: org/apache/xml/serialize/BaseMarkupSerializer
at Sample.main(Sample.java:133)
・xml-apis.jarがない場合
java.lang.NoClassDefFoundError: org/w3c/dom/ranges/DocumentRange
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
at churchillobjects.rss4j.generator.RssGenerator.<init>(RssGenerator.java:184)
at churchillobjects.rss4j.generator.RssGeneratorImpl090.<init>(RssGeneratorImpl090.java:49)
at churchillobjects.rss4j.generator.RssGeneratorImpl091.<init>(RssGeneratorImpl091.java:56)
at churchillobjects.rss4j.generator.RssGeneratorImpl100.<init>(RssGeneratorImpl100.java:45)
at churchillobjects.rss4j.generator.RssGenerator.getGenerator(RssGenerator.java:171)
at churchillobjects.rss4j.generator.RssGenerator.generateRss(RssGenerator.java:148)
at Sample.main(Sample.java:142)
*/
StringWriter stringWriter = null;
try
{
/* RSSのバージョン */
String VERSION = "1.0";
/** ホームページのタイトル */
String HOMEPAGE_TITLE = "テストのホームページ";
/** ホームページのURL */
String HOMEPAGE_URL = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html";
/** ホームページの説明 */
String HOMEPAGE_DESCRIPTION = "これはJavaA2Zの「RSS」単語のテストです。";
/** RSSのURI */
String HOMEPAGE_RSS_URI = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss";
/** RSSの言語 */
String HOMEPAGE_LANG = "ja";
/** コピーライト表記 */
String HOMEPAGE_COPYRIGHT = "(C)KAB-studio 2005 ALL RIGHTS RESERVED";
/** RSS 日付フォーマット。 */
String RSS_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'+09:00'";
SimpleDateFormat FORMATTER = new SimpleDateFormat( RSS_DATE_TIME_FORMAT );
// RSSドキュメントを作成。
RssDocument rssDocument = new RssDocument();
// バージョンはRSS1.0にします。
rssDocument.setVersion( VERSION );
// チャンネルの基本情報をセット。
RssChannel rssChannel = new RssChannel();
rssChannel.setChannelTitle( HOMEPAGE_TITLE );
rssChannel.setChannelLink( HOMEPAGE_URL );
rssChannel.setChannelDescription( HOMEPAGE_DESCRIPTION );
rssChannel.setChannelUri( HOMEPAGE_RSS_URI );
rssChannel.setChannelLanguage( HOMEPAGE_LANG );
rssChannel.setChannelCopyright( HOMEPAGE_COPYRIGHT );
// チャンネルの基本情報の方にも Dublin Core をセット。
RssDublinCore rssDublinCoreForChannel = new RssDublinCore();
rssDublinCoreForChannel.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) );
// date: 2005-11-24T19:49:28+09:00
rssChannel.setDublinCore( rssDublinCoreForChannel );
// これがないと
// 未宣言の名前空間の接頭語を参照します: 'dc'。リソース 'http://192.168.0.50/Programing/JavaA2Z/rss' の実行エラーです。ライン 24、位置 14
// <dc:date>2005-02-24T03:15:11+09:00</dc:date>
// ってエラーになります。
// アイテムをひとつ作ります。
RssChannelItem rssChannelItem = new RssChannelItem();
rssChannelItem.setItemTitle( "項目1:Writer" );
rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html" );
rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." );
// 日付情報としてDublin Coreをセットします。
RssDublinCore rssDublinCore = new RssDublinCore();
rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) ); // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。
// date: 2005-11-24T19:49:28+09:00
rssChannelItem.setDublinCore( rssDublinCore );
// アイテムをチャンネルに追加します。
rssChannel.addItem( rssChannelItem );
// もうひとつアイテムを作ります。
rssChannelItem = new RssChannelItem();
rssChannelItem.setItemTitle( "項目2:StringWriter" );
rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html" );
rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." );
// 日付情報としてDublin Coreをセットします。
rssDublinCore = new RssDublinCore();
rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) ); // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。
// date: 2005-11-24T19:49:28+09:00
rssChannelItem.setDublinCore( rssDublinCore );
// アイテムをチャンネルに追加します。
rssChannel.addItem( rssChannelItem );
// RssChannelをRssDocumentに追加します。
rssDocument.addChannel( rssChannel );
// 書き込みます。
stringWriter = new StringWriter();
RssGenerator.generateRss( rssDocument, stringWriter );
System.out.println( stringWriter.toString() );
/*
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<channel rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss">
<title>テストのホームページ</title>
<description>これはJavaA2Zの「RSS」単語のテストです。</description>
<link>http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html</link>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html"/>
<rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html"/>
</rdf:Seq>
</items>
<dc:date>2005-11-24T19:49:28+09:00</dc:date>
</channel>
<item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html">
<title>項目1:Writer</title>
<link>http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html</link>
<description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description>
<dc:date>2005-11-24T19:49:28+09:00</dc:date>
</item>
<item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html">
<title>項目2:StringWriter</title>
<link>http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html</link>
<description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description>
<dc:date>2005-11-24T19:49:28+09:00</dc:date>
</item>
</rdf:RDF>
*/
// ファイルに出力する場合は、これを
// UTF-8形式で出力すればいいでしょう。
}
catch( ParseException e )
{
e.printStackTrace();
}
catch( RssGenerationException e )
{
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( stringWriter != null )
{
stringWriter.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
}
// Sample.java import java.io.StringWriter; import java.io.IOException; import java.util.Calendar; import java.text.SimpleDateFormat; import java.text.ParseException; import churchillobjects.rss4j.RssChannel; import churchillobjects.rss4j.RssChannelItem; import churchillobjects.rss4j.RssDocument; import churchillobjects.rss4j.RssDublinCore; import churchillobjects.rss4j.generator.RssGenerator; import churchillobjects.rss4j.generator.RssGenerationException; public class Sample { public static void main( String[] args ) { /* ■Rss4jの使用方法 1. http://www.churchillobjects.com/c/13005.html から rss4j092.ja というファイルをダウンロードしてください。 2. この解凍してください(このファイルを直接クラスパスに 追加しないでください。拡張子を.zipに変えて解凍すると いいかもしれません) 3. libフォルダにある以下のファイルをクラスパスに追加してください。 rss4j.jar 4. Rss4jは、Xercesを使用しますのでこちらも準備する必要があります。 http://xml.apache.org/xerces-j/ から任意のファイル(たとえばXerces-J-bin.2.7.1.zip)ダウンロードして ください。 5. 以下のファイルをクラスパスに加えてください。 xercesImpl.jar xml-apis.jar 注:この2ファイルをクラスパスに加えないと、実行時に以下の例外が 投げられます。 ・xercesImpl.jarがない場合 java.lang.NoClassDefFoundError: org/apache/xml/serialize/BaseMarkupSerializer at Sample.main(Sample.java:133) ・xml-apis.jarがない場合 java.lang.NoClassDefFoundError: org/w3c/dom/ranges/DocumentRange at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:502) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) at java.net.URLClassLoader.defineClass(URLClassLoader.java:250) at java.net.URLClassLoader.access$100(URLClassLoader.java:54) at java.net.URLClassLoader$1.run(URLClassLoader.java:193) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:186) at java.lang.ClassLoader.loadClass(ClassLoader.java:299) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265) at java.lang.ClassLoader.loadClass(ClassLoader.java:255) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:502) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) at java.net.URLClassLoader.defineClass(URLClassLoader.java:250) at java.net.URLClassLoader.access$100(URLClassLoader.java:54) at java.net.URLClassLoader$1.run(URLClassLoader.java:193) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:186) at java.lang.ClassLoader.loadClass(ClassLoader.java:299) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265) at java.lang.ClassLoader.loadClass(ClassLoader.java:255) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315) at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source) at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source) at churchillobjects.rss4j.generator.RssGenerator.<init>(RssGenerator.java:184) at churchillobjects.rss4j.generator.RssGeneratorImpl090.<init>(RssGeneratorImpl090.java:49) at churchillobjects.rss4j.generator.RssGeneratorImpl091.<init>(RssGeneratorImpl091.java:56) at churchillobjects.rss4j.generator.RssGeneratorImpl100.<init>(RssGeneratorImpl100.java:45) at churchillobjects.rss4j.generator.RssGenerator.getGenerator(RssGenerator.java:171) at churchillobjects.rss4j.generator.RssGenerator.generateRss(RssGenerator.java:148) at Sample.main(Sample.java:142) */ StringWriter stringWriter = null; try { /* RSSのバージョン */ String VERSION = "1.0"; /** ホームページのタイトル */ String HOMEPAGE_TITLE = "テストのホームページ"; /** ホームページのURL */ String HOMEPAGE_URL = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html"; /** ホームページの説明 */ String HOMEPAGE_DESCRIPTION = "これはJavaA2Zの「RSS」単語のテストです。"; /** RSSのURI */ String HOMEPAGE_RSS_URI = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss"; /** RSSの言語 */ String HOMEPAGE_LANG = "ja"; /** コピーライト表記 */ String HOMEPAGE_COPYRIGHT = "(C)KAB-studio 2005 ALL RIGHTS RESERVED"; /** RSS 日付フォーマット。 */ String RSS_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'+09:00'"; SimpleDateFormat FORMATTER = new SimpleDateFormat( RSS_DATE_TIME_FORMAT ); // RSSドキュメントを作成。 RssDocument rssDocument = new RssDocument(); // バージョンはRSS1.0にします。 rssDocument.setVersion( VERSION ); // チャンネルの基本情報をセット。 RssChannel rssChannel = new RssChannel(); rssChannel.setChannelTitle( HOMEPAGE_TITLE ); rssChannel.setChannelLink( HOMEPAGE_URL ); rssChannel.setChannelDescription( HOMEPAGE_DESCRIPTION ); rssChannel.setChannelUri( HOMEPAGE_RSS_URI ); rssChannel.setChannelLanguage( HOMEPAGE_LANG ); rssChannel.setChannelCopyright( HOMEPAGE_COPYRIGHT ); // チャンネルの基本情報の方にも Dublin Core をセット。 RssDublinCore rssDublinCoreForChannel = new RssDublinCore(); rssDublinCoreForChannel.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) ); // date: 2005-11-24T19:49:28+09:00 rssChannel.setDublinCore( rssDublinCoreForChannel ); // これがないと // 未宣言の名前空間の接頭語を参照します: 'dc'。リソース 'http://192.168.0.50/Programing/JavaA2Z/rss' の実行エラーです。ライン 24、位置 14 // <dc:date>2005-02-24T03:15:11+09:00</dc:date> // ってエラーになります。 // アイテムをひとつ作ります。 RssChannelItem rssChannelItem = new RssChannelItem(); rssChannelItem.setItemTitle( "項目1:Writer" ); rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html" ); rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." ); // 日付情報としてDublin Coreをセットします。 RssDublinCore rssDublinCore = new RssDublinCore(); rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) ); // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。 // date: 2005-11-24T19:49:28+09:00 rssChannelItem.setDublinCore( rssDublinCore ); // アイテムをチャンネルに追加します。 rssChannel.addItem( rssChannelItem ); // もうひとつアイテムを作ります。 rssChannelItem = new RssChannelItem(); rssChannelItem.setItemTitle( "項目2:StringWriter" ); rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html" ); rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." ); // 日付情報としてDublin Coreをセットします。 rssDublinCore = new RssDublinCore(); rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) ); // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。 // date: 2005-11-24T19:49:28+09:00 rssChannelItem.setDublinCore( rssDublinCore ); // アイテムをチャンネルに追加します。 rssChannel.addItem( rssChannelItem ); // RssChannelをRssDocumentに追加します。 rssDocument.addChannel( rssChannel ); // 書き込みます。 stringWriter = new StringWriter(); RssGenerator.generateRss( rssDocument, stringWriter ); System.out.println( stringWriter.toString() ); /* <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <channel rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss"> <title>テストのホームページ</title> <description>これはJavaA2Zの「RSS」単語のテストです。</description> <link>http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html</link> <items> <rdf:Seq> <rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html"/> <rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html"/> </rdf:Seq> </items> <dc:date>2005-11-24T19:49:28+09:00</dc:date> </channel> <item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html"> <title>項目1:Writer</title> <link>http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html</link> <description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description> <dc:date>2005-11-24T19:49:28+09:00</dc:date> </item> <item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html"> <title>項目2:StringWriter</title> <link>http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html</link> <description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description> <dc:date>2005-11-24T19:49:28+09:00</dc:date> </item> </rdf:RDF> */ // ファイルに出力する場合は、これを // UTF-8形式で出力すればいいでしょう。 } catch( ParseException e ) { e.printStackTrace(); } catch( RssGenerationException e ) { e.printStackTrace(); } finally { // 最後にclose()メソッドを呼んで後処理をします。 // また、これは必ず行うため、finally内で行います。 try { if( stringWriter != null ) { stringWriter.close(); } } catch( IOException e ) { e.printStackTrace(); } } } }