XMLをXPATH的なキー名で、値、属性を格納したマップを生成するクラスを作成しました。
どのようなXMLフォーマットでも利用できるのでかなり便利です。
XmlMapHandler.java
package jp.co.powerbeans.wsm.xml;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* WsMにRESTリクエストを送り, レスポンスXMLをMapのListで返すクラス.
* 利用方法は main メソッドを参考にして下さい.
*
* 2008 WebServiceMarket/PowerBEANS
* @author PowerBEANS
*/
public class XmlMapHandler extends DefaultHandler {
/**
* 現在のXPATH
*/
private String sum_element_name;
/**
* 一時格納タグ値
*/
private String lastString;
/**
* 値格納用Map
*/
private LinkedHashMap<String, List<String>> valMap = new LinkedHashMap<String, List<String>>();
/**
* 属性格納用Map
*/
private LinkedHashMap<String, List<Map<String, String>>> attrMap = new LinkedHashMap<String, List<Map<String, String>>>();
/**
* 格納する際にキーから削除するパス
*/
private String ignorePath;
/**
* コンストラクタ
* @param ignore_path 削除パス(ルートタグ名 /root/ 等を指定)
*/
public XmlMapHandler(String ignore_path) {
this.ignorePath = ignore_path;
}
/**
* コンストラクタ
*/
public XmlMapHandler() {
this("");
}
/**
* 本クラスを直接起動した場合に実行されるメソッド.
* (XmlMapHandler利用サンプルコード)
* @param args 引数
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// 1. 接続URL
final String url = "http://weather.livedoor.com/forecast/webservice/rest/v1?city=11&day=today";
// 2. 専用ハンドラクラス生成
XmlMapHandler handler = new XmlMapHandler("/lwws/");
// 3. 1時細分区 都市リスト取得
handler.request(url);
// 4. 値を取得
LinkedHashMap<String, List<String>> valmap = handler.getValMap();
// 5. 属性を取得
LinkedHashMap<String, List<Map<String,String>>> attrmap = handler.getAttrMap();
// 1つ目の "/lwws/title" タグの値を取得
String title = valmap.get("title").get(0);
// 1つ目の "/lwws/location" タグの "area" 属性を取得
String location_area = attrmap.get("location").get(0).get("area");
}
/**
* RESTリクエストを実行し内部リストに結果を格納する
* @param url url
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
public void request(String url) throws ParserConfigurationException, SAXException, IOException {
// もしProxyが必要な場合
// System.setProperty("http.proxyHost", "proxy.host");
// System.setProperty("http.proxyPort", "8080");
// 内部変数初期化
this.sum_element_name = "";
this.attrMap.clear();
this.valMap.clear();
SAXParserFactory spfactory = SAXParserFactory.newInstance();
// SAXパーサーを生成
SAXParser parser = spfactory.newSAXParser();
// XMLファイルを指定されたデフォルトハンドラーで処理します
parser.parse(url, this);
}
/**
* 要素の開始タグ読み込み時、取得した各種情報を退避する。
*
* @param uri URI
* @param local_name ローカル名
* @param qname タグ名
* @param attributes アトリビュート
*/
public void startElement(String uri, String local_name, String qname,
Attributes attributes) {
this.sum_element_name += "/" + qname;
{
final String map_key = this.sum_element_name.replaceFirst(ignorePath, "");
List attr_list = (List) this.attrMap .get(map_key);
if (attr_list == null) {
// 格納されていない場合は作成
attr_list = new ArrayList();
this.attrMap.put(map_key, attr_list);
} else {
String name = "a";
name = null;
}
attr_list.add(createAttrMap(attributes));
}
}
/**
* @param attributes
* @return
*/
private LinkedHashMap createAttrMap(Attributes attributes) {
LinkedHashMap map = new LinkedHashMap();
for(int i = 0; i < attributes.getLength(); i++) {
map.put(attributes.getQName(i), attributes.getValue(i));
}
return map;
}
/**
* タグ終了時処理
*
* @param uri URI
* @param local_name ローカル名
* @param qname タグ名
*/
public void endElement(String uri, String local_name, String qname) {
// 現在のパスをキーに格納
final String map_key = this.sum_element_name.replaceFirst(ignorePath, "");
String val = this.lastString == null ? "" : this.lastString;
this.lastString = "";
// 値格納.すでに格納されているかチェック
{
List val_list = (List) this.valMap.get(map_key);
if (val_list == null) {
// 格納されていない場合は作成
val_list = new ArrayList();
this.valMap.put(map_key, val_list);
}
val_list.add(val);
}
this.sum_element_name = this.sum_element_name.substring(0, this.sum_element_name.length() - qname.length() - 1);
}
/* (non-Javadoc)
* @see org.xml.sax.ContentHandler#characters(char[], int, int)
*/
public void characters(char[] ch, int start, int length) {
this.lastString = new String(ch, start, length);
}
/**
* 全値マップを取得
* @return 値Map (key:xpath, value:テキスト)
*/
public LinkedHashMap<String, List<String>> getValMap() {
return valMap;
}
/**
* 全属性マップを取得. 属性なしの場合はnull
* @return 属性Map(key:xpath, value:属性Map[key:属性名, value:値])
*/
public LinkedHashMap<String, List<Map<String, String>>> getAttrMap() {
return attrMap;
}
}
利用方法(main メソッド内のサンプルから抜粋)
// 1. 接続URL
final String url = "http://weather.livedoor.com/forecast/webservice/rest/v1?city=11&day=today";
// 2. 専用ハンドラクラス生成
XmlMapHandler handler = new XmlMapHandler("/lwws/");
// 3. 1時細分区 都市リスト取得
handler.request(url);
// 4. 値を取得
LinkedHashMap<String, List<String>> valmap = handler.getValMap();
// 5. 属性を取得
LinkedHashMap<String, List<Map<String,String>>> attrmap = handler.getAttrMap();
// 1つ目の "/lwws/title" タグの値を取得
String title = valmap.get("title").get(0);
// 1つ目の "/lwws/location" タグの "area" 属性を取得
String location_area = attrmap.get("location").get(0).get("area");
العاب بنات , العاب طبخ , مسجات ,الفيس بوك , فيس بوك بالعربي , فيس بوك عربي , موقع الفيس بوك , الفيس بوك , Facebook , Facebook arabic , خواطر , عيد ميلاد سعيد , طبخ , مطبخ , مطبخ منال العالم , العاب ماريو , لعبة ماريو , العاب فلاش جديده , gamezer , اسرار gamezer , لعبه gamezer , لعبة قمزر , طيور الجنة , قياس , قياس سرعة اتصالك , قياس سرعه dsl , قياس السرعة الانترنت , قياس السرعة الاتصال ,
مقياس سرعة الاتصال , موقع قياس سرعة الانترنت , برنامج قياس سرعة الانترنت , قياس سرعة الانترنت مكافي , subscene , ترجمه subscene , subscene للترجمه , موقع subscene ترجمه , subscene arabic , موقع subscene , شرح subscene , علاج تساقط الشعر , علاج الشعر , تساقط الشعر , علاج تساقط الشعر بالاعشاب , علاج تساقط الشعر للرجال , اسباب تساقط الشعر , علاج تقصف الشعر , علاج تساقط الشعر طبيعيا , مترجم قوقل , مترجم جوجل , مترجم google , مترجمgoogle , ترجمة قوقل , موقع ترجمة نصوص , موقع ترجمة , موقع ترجمة فوري , موقع ترجمة فورية , موقع ترجمة قصص , موقع ترجمة مواضيع , موقع ترجمة شعر , مترجم , ترجمة , ترجم , ترجمة فورية , translate , google translate , ترجمة المواقع , ترجمة مواقع , ترجمة مجانية , ترجمة جمل , ترجمة كلمات , ترجمة عبارات , ترجمه , ترجمه نصوص , ترجمه قوقل , ترجمه مجاني
jv[lm ,
zuma ~ لعبة zuma منتديات , منتدى , اناشيد , اناشيد اطفال , اناشيد طيور الجنة , اناشيد طيور الجنة , طيور الجنة , اناشيد اسلامية , قران كريم , القران الكريم , صور , خلفيات , صور حب
توبيكات ملونه توبيكات , صور للماسنجر , شعر خواطر عالم حواء


