/**
* 文 件 名: MT_SaxParserService.java
* 描 述:
* 版 权: Copyright (c)20010-2011 motone All Rights Reserved.
* 公 司: 摩通科技
* 作 者: 邓丽霞
* 版 本: 1.0
* 创建时间: 2011-4-18
*
* 修改历史:
* 时间 作者 版本 描述
* ------------------------------------------------------------------
* 2011-4-18 邓丽霞 1.0 1.0 Version
*/
package com.mogoo.launcher2.utils;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
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;
import com.mogoo.launcher2.config.Mogoo_GlobalConfig;
import android.util.Log;
public class Mogoo_SaxParserService
{
private SaxXmlHandler mSaxXmlHandler;
private static String TAG = "Mogoo_SaxParserService";
private static final boolean DEBUG = false;//Mogoo_GlobalConfig.LOG_DEBUG;
/*
* InputStream inputStream xml文件输入流
* String keyNode 其name属性需作为映射表键的节点名
* String keySubNode 需获取其name属性值的keyNode的子节点名
*/
public Mogoo_SaxParserService(InputStream inputStream, String keyNode, String keySubNode)
{
try
{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
mSaxXmlHandler = new SaxXmlHandler(keyNode,keySubNode);
parser.parse(inputStream, mSaxXmlHandler);
}
catch(Exception e)
{
e.printStackTrace();
}
}
/*
* 返回xml解析数据
*/
public HashMap<String,ArrayList<String>> getDataList()
{
return mSaxXmlHandler.mDataList;
}
public class SaxXmlHandler extends DefaultHandler
{
private HashMap<String,ArrayList<String>> mDataList = null;
private ArrayList<String> mSubNodeData = null;
private String mKeyNode;
private String mKeySubNode;
private String mPreKeyNodeName;
public SaxXmlHandler(String keyNode, String keySubNode)
{
mKeyNode = keyNode;
mKeySubNode = keySubNode;
}
/*
* 接收文档的开始的通知。
*/
@Override
public void startDocument() throws SAXException
{
mDataList = new HashMap<String,ArrayList<String>>();
}
/*
* 接收元素开始的通知。
* 参数意义如下:
* namespaceURI:元素的命名空间
* localName :元素的本地名称(不带前缀)
* qName :元素的限定名(带前缀)
* atts :元素的属性集合
*/
@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException
{
if(DEBUG)
{
Log.d(TAG, "startElement namespaceURI : "+namespaceURI
+" localName : "+localName
+" qName :"+qName);
}
if(localName.equals(mKeyNode))
{
mSubNodeData = null;
if(atts != null)
{
mSubNodeData = new ArrayList<String>();
mPreKeyNodeName = atts.getValue("name");
if(DEBUG)
{
Log.d(TAG, "mPreKeyNodeName: "+mPreKeyNodeName);
}
}
}
else if(localName.equals(mKeySubNode))
{
if(atts != null && mSubNodeData != null)
{
String subNode = atts.getValue("name");
mSubNodeData.add(subNode);
if(DEBUG)
{
Log.d(TAG, "subNode: "+subNode);
}
}
}
}
/*
* 接收元素的结尾的通知。
* 参数意义如下:
* uri :元素的命名空间
* localName :元素的本地名称(不带前缀)
* name :元素的限定名(带前缀)
*
*/
@Override
public void endElement(String uri, String localName, String name) throws SAXException
{
if(DEBUG)
{
Log.d(TAG, "endElement uri : "+uri
+" localName : "+localName
+" name :"+name);
}
if(localName.equals(mKeyNode))
{
if(mSubNodeData != null)
{
mDataList.put(mPreKeyNodeName, mSubNodeData);
}
}
}
/*
* 接收字符数据的通知。
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException
{
if(DEBUG)
{
String str = new String(ch, start, length);
Log.d(TAG, "characters : "+str);
}
}
/*
* 接收文档的结尾的通知。
* @see org.xml.sax.helpers.DefaultHandler#endDocument()
*/
public void endDocument()
{
if(DEBUG)
{
Log.d(TAG, "endDocument");
}
}
}
}