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

戻る inserted by FC2 system