XML解析にDom&Saxパーサーを使用できます。
HTTPリクエストからXmlを呼び出すためのコードスニペットがあり、Saxパーサーを使用して解析します。
SAXParserImpl saxparser = new SAXParserImpl();
ListParser receivedListHandler=new ListParser();
static DataInputStream din = null;
public static String response;
HttpConnection hc = null;
OutputStream os;
try
{
final String url ="<Enter URL for Xml Http Address>"+ InitClass.getConnectionString()+";ConnectionTimeout=25000";
hc = (HttpConnection)Connector.open(url);
os = hc.openOutputStream();
os.write(postDataBytes);
if (hc.getResponseCode() == 200)
din = hc.openDataInputStream();
else
response = "" + hc.getResponseCode();
saxparser.parse(din, receivedListHandler);
}
catch (Exception e)
{
}
finally
{
try
{
if(din!=null)
din.close();
din = null;
if(hc!=null)
hc.close();
hc = null;
}
catch (Exception e) { }
}
/ *パーサークラス* /
public class ListParser extends DefaultHandler
{
private String Key="";
private Hashtable ht=new Hashtable();
vector vec = new Vector();
public ListParser()
{
}
/**
* Gets called, whenever a Xml is start .
*/
public void startDocument() throws SAXException
{
}
/**
* Gets called, whenever a Xml is End .
*/
public void endDocument() throws SAXException
{
}
/**
* Gets called, whenever a new tag is found.
*/
public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException
{
if(name.equals("address"))
{
ht = null;
ht = new Hashtable();
}
else if(name.equals("login"))
{
}
Key=name;
}
/**
* Gets called, whenever a closed tag is found.
*/
public void endElement(String uri, String localName, String name) throws SAXException
{
if(name.equals("address"))
{
vec.addElement(ht);
}
}
public void characters(char[] ch, int start, int length) throws SAXException
{
String element=new String(ch, start, length);
ht.put(Key, element);
}
}
XMLを解析し、XMLタグごとにハッシュテーブルのベクトルvecでデータを提供します。