DocumentBuilder#parse()の引数にInputStreamを使ってみる
戻る
::::::::::::::
RagUtil.java
::::::::::::::
/**
* $Id: DocumentBuilder.html,v 1.1 2009/06/22 16:11:42 kishi Exp kishi $
* @author KISHI Yasuhiro
*/
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.*;
import java.security.MessageDigest;
public class RagUtil {
/** 文字列からSHA1ハッシュ値を求めて16進で表示する
@param str 入力文字列
@return ハッシュ値
*/
static public String sha1Digest( String str ) {
StringBuffer result = new StringBuffer( "" );
try {
MessageDigest md = MessageDigest.getInstance( "SHA1" ); /* MD5のときは"MD5"とすればいいですよ! */
md.update( str.getBytes() );
byte[] digest = md.digest();
for ( int i = 0; i < digest.length; i++ ) {
if ( ( digest[ i ] & 0x0ff ) / 16 == 0 ) {
result.append( "0" );
}
result.append( Integer.toHexString( digest[ i ] & 0x0ff ) );
}
} catch ( Exception e ) {}
return result.toString();
}
}
::::::::::::::
SimpleRSSTest.java
::::::::::::::
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
import java.util.*;
import java.net.*;
/**
* $Id: DocumentBuilder.html,v 1.1 2009/06/22 16:11:42 kishi Exp kishi $
* @author KISHI Yasuhiro
*/
public class SimpleRSSTest {
public static void main( String[] args ) throws Exception {
//------------------------------------------------------------------------------------
// ドキュメントビルダーファクトリを生成
//------------------------------------------------------------------------------------
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//------------------------------------------------------------------------------------
// 【重要】 -- CDATAノードの取り出し方です --
// このファクトリで作成されたパーサが CDATA ノードを Text ノードに変換し、
// それを隣接 (存在する場合) Text ノードに追加するように指定します。
// デフォルトでは、この値は false に設定されます。
//------------------------------------------------------------------------------------
factory.setCoalescing( true );
//------------------------------------------------------------------------------------
// ドキュメントビルダーを生成
//------------------------------------------------------------------------------------
DocumentBuilder builder = factory.newDocumentBuilder();
//----------------------------------------------------------------
// URLを指定してレスポンスのInputStreamを取得
//----------------------------------------------------------------
URL url = new URL( "http://www.doblog.com/weblog/RSSServlet?CMD=LATEST&userid=7160&TYPE=RSS_2_0" );
HttpURLConnection conn = ( HttpURLConnection ) url.openConnection();
// ユーザ・エージェントの設定
String userAgent = RagUtil.sha1Digest( new Date().toString() + "128-256-384-512-640-768" );
if ( ( url.hashCode() + userAgent.hashCode() ) % 2 == 0 ) {
userAgent = userAgent.toUpperCase();
}
conn.setRequestProperty( "User-Agent", userAgent );
InputStream is = conn.getInputStream();
//------------------------------------------------------------------------------------
// パースを実行してDocumentオブジェクトを取得(DocumentBuiderの引数はInputStream)
//------------------------------------------------------------------------------------
Document doc = builder.parse( is );
System.out.println( "【XMLのバージョン】" + doc.getXmlVersion() );
System.out.println( "【文書のエンコーディング】" + doc.getXmlEncoding() );
Element root = doc.getDocumentElement();
System.out.println( "【ルート要素のタグ名】" + root.getTagName() );
System.out.println( "【ルート要素の属性】" + root.getAttribute( "version" ) );
// あとはroot要素からいつものスタイルでパースしていく
}
}
■実行結果
$ java -cp . SimpleRSSTest
【XMLのバージョン】1.0
【文書のエンコーディング】UTF-8
【ルート要素のタグ名】rss
【ルート要素の属性】2.0
戻る