goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

JAVAのフォーマット変換:DOM編(AJAXやJAVA入出力と比較できる形)。

2006-09-27 17:17:59 | JavaとWeb

 今回は、Javaの入出力のあと、フォーマットについて。
 むかしCSVについては、やった気がするので、今回はXMLについて。
 DOMを利用します。

 DOMについては、Domによる、XMLデータ操作を、じゃらん宿表示APIで示してみる(その2:説明)で、AJAXを使って実験したので、今回は、これをJAVAでやってみることにします。

 また、いままで、JAVA入出力で、InputStreamReader(InputStream)の形にする方法を説明してきたので、今回、その関連についても説明したいと思います。




■方針

 DOMを扱う場合、JAVAのバージョン1.4以降では、
import javax.xml.parsers.*;
import org.w3c.dom.*;

をして、

// ドキュメントビルダーファクトリを生成
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();

// ドキュメントビルダーを生成
DocumentBuilder builder = dbfactory.newDocumentBuilder();

// パースを実行してDocumentオブジェクトを取得
Document xtree = builder.parse(InputStream);

をすると、Documentが取得できます。
builder.parse(InputStream);のところですが、実は
InputStreamでなくても、URIでもFileでもいいのですが、
今回は、いままでの関係から、InputStreamのケースを利用
したいと思います。

つまり、いままでは
new InputStreamReader(InputStream)だったのですが、
今回は
builder.parse(InputStream);
になったということです。

そして、どっかのページから、InputStreamを取得するため、
URL url = new URL(参照するURL名);
したら、url.openStream()で取得しています。

結果として、
Document xtree = builder.parse(url.openStream());
を実行します。




■問題点

 先ほどのAJAXのケースでは、

hotelnode.selectSingleNode

というのを使っていますが、selectSingleNodeメソッドはないので、
FireFoxのケースと同じく、ここで示した

komoku = hotelnode.getElementsByTagName("HotelName");
hotelName[i] = komoku[0].firstChild.nodeValue;

のやりかたを使います。

なお、hotelnodeは、このままではNodeで、getElementsByTagNameが使えないので
Elementにキャストして
komoku = ((Element)hotelnode).getElementsByTagName("HotelName");
のようにします。




■ソース

こんなかんじです。
http://jws.jalan.net/APILite/HotelSearch/V1/?key=guest&pref=130000&l_area=137100&s_area=137102
を検索に行って、ホテル名と住所を画面表示します。

import java.io.*;
import java.net.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class test {
	/*
	 * 	メイン処理(呼び出し元)
	 */
	public static void main(String[] args) 
	{
		try
		{
			int	i;
			
			//	InputStreamを作り出すために
			//	URLを取得
			URL	url
 = new URL("http://jws.jalan.net/APILite/HotelSearch/V1/?key=guest&pref=130000&l_area=137100&s_area=137102");
			
		      // ドキュメントビルダーファクトリを生成
			DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
		      // ドキュメントビルダーを生成
			DocumentBuilder builder = dbfactory.newDocumentBuilder();
     		 // パースを実行してDocumentオブジェクトを取得
      		Document xtree = builder.parse(url.openStream());

      		// ルート要素を取得
			NodeList hotellist = xtree.getElementsByTagName("Hotel");
			String buf = "";
			for(i = 0 ; i < hotellist.getLength() ; i ++ )
			{
				//	1件分のホテルデータ取り出し
				Node hotelnode	= 	hotellist.item(i);

				//	各種データ取り出し
				NodeList komoku;
				
				komoku = ((Element)hotelnode).getElementsByTagName("HotelName");
				String	HotelName = komoku.item(0).getFirstChild().getNodeValue();

				komoku = ((Element)hotelnode).getElementsByTagName("HotelAddress");
				String	HotelAddress = komoku.item(0).getFirstChild().getNodeValue();

				//	書き出し
				buf = buf + "¥n" + HotelName + " " + HotelAddress;
			}

			//	表示
			System.out.println(buf);
		}
		catch (Exception e)
		{
      		e.printStackTrace();
    	}

	}

}

(上記< > ¥は、本当は半角)

(なお、今回のものは、JavaでHello Worldを参考にしています。
 ここ http://www.hellohiro.com/xmldom.htm
 バージョン1.3以前のもので、必要なライブラリも、そのサイトに
 かいてありました)


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« TVバンク、P2Pを取り入れた動... | トップ | 無料で使えるフォーマット変... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事