XMLの読み込み(SAXParser)・Javaの小技、サンプル、ニュースなどを紹介していきます。みんなで参考にしてください。

Ads by Google


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

XMLの読み込み(SAXParser)


SAX仕様でXMLを読み込むサンプルです。
DOMはとにかくメモリを食いますので、その点ではSAXを使ったほうがよさそうですが、SAXはプログラムが分かりにくくなるという欠点もあります。


//パーサー呼び出しサンプル

File file = new File(XMLファイル名);
SAXParserFactory spfactory = SAXParserFactory.newInstance();
// SAXパーサーを生成
SAXParser parser = spfactory.newSAXParser();
// XMLファイルを指定されたデフォルトハンドラーで処理します
XMLParse xmlParse = new XMLParse();
parser.parse(file, xmlParse);

//以下、XMLパーササンプル

/**
* XMLのパーサ
* MyObjectは適当に作成してください。
* startElementで文字列が取れるので、カレントのオブジェクトに
* 設定していきます。ただ、文字列は途中で切れている可能性が
* あるので、 startElement内では文字列をアペンドしておき、
* endElementなどで実際の値に変換すると良いです。
*/
public class XMLParse extends DefaultHandler {
/**
* オブジェクトのスタック
*/
protected Stack stack;
/**
* 現在のオブジェクト
*/
protected Object currentObj;
/**
* 現在のタグ
*/
protected String currentTag;

/**
* コンストラクタ
*/
public XMLParse()
{
stack = new Stack();
}

/**
* ファイル読み込み開始
*/
public void startDocument() {
System.out.println("読み込み開始");
}

/**
* タグの読み込み開始
*/
public void startElement(String uri, String localName,
String qName, Attributes attributes)
{
try {

currentTag = qName;

if (qName.equals(MY_OBJECT_TAG_NAME)) {
currentObj = MyObject.getInstance(attributes);
stack.push(currentObj);
}
}
catch (Exception e) {
e.printStackTrace();
}
}

/**
* タグ内の文字データの通知を受け取る。
*/
public void characters(char[] ch, int offset, int length) {
try {
String value = new String(ch, offset, length);

//valueは途中で文字が切れている可能性があるので、
//ここでは文字列をセットするだけにとどめる
if (currentObj != null)
currentObj.setValue(currentTag, currentAttr, value);
}
catch (Exception e) {
e.printStackTrace();
}
}

/**
* タグの読み込み終了
*/
public void endElement(String uri, String localName, String qName) {
try {

if (currentObj == null)
return;
if (qName.equals(MY_OBJECT_TAG_NAME)) {
stack.pop();
if (stack.empty())
currentObj = null;
else
currentObj = (MyObject)stack.peek();
}
}
catch (Exception e) {
e.printStackTrace();
}
}

/**
* ファイル読み込み終了。
*/
public void endDocument() {
System.out.println("読み込み終了");
}
}


Copyright © Javaテクニカルサンプル集 All Rights Reserved.
FC2ブログ 一戸建て
相互リンクRANGER