package org.carelife.creader.xmlparser;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.carelife.creader.dao.SearchData;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
public class SearchParser {
public static HashMap<String,Object> getSearchResultByXml(InputStream is){
// Log.i("pull parser","begin");
HashMap<String,Object> result = null;
List<SearchData> Slist = null;
SearchData Search_data = null;
String currentTag = null;
String maxpage = null;
String pagesize = null;
String pagenum = null;
try{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(is, "GBK");
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT)
{
String typeName = parser.getName();
if (type == XmlPullParser.START_TAG)
{
// Log.v("TAG", "typeName=" + typeName);
if ("DOCUMENT".equals(typeName)){
result = new HashMap<String,Object>();
Slist = new ArrayList<SearchData>();
}else if ("pagetotal".equals(typeName)){
currentTag = "pagetotal";
}else if ("pagesize".equals(typeName)){
currentTag = "pagesize";
}else if ("pagenum".equals(typeName)){
currentTag = "pagenum";
}else if ("item".equals(typeName)){
Search_data = new SearchData();
}else if ("book".equals(typeName)){
currentTag = "book";
}else if ("author".equals(typeName)){
currentTag = "author";
}else if ("type".equals(typeName)){
currentTag = "type";
}else if ("status".equals(typeName)){
currentTag = "status";
}else if ("desc".equals(typeName)){
currentTag = "desc";
}else if ("picurl".equals(typeName)){
currentTag = "picurl";
}else if ("loc".equals(typeName)){
currentTag = "loc";
}else if ("url".equals(typeName)){
currentTag = "url";
}else if ("chapter".equals(typeName)){
currentTag = "chapter";
}else if ("chapterurl".equals(typeName)){
currentTag = "chapterurl";
}else if ("chaptermd5".equals(typeName)){
currentTag = "chaptermd5";
}else if ("chaptercid".equals(typeName)){
currentTag = "chaptercid";
}else if ("site".equals(typeName)){
currentTag = "site";
}else if ("date".equals(typeName)){
currentTag = "date";
}
}else if (type == XmlPullParser.END_TAG){
if ("item".equals(typeName))
{
Slist.add(Search_data);
Search_data = null;
}else if("DOCUMENT".equals(typeName)){
result.put("maxpage", maxpage);
result.put("pagesize", pagesize);
result.put("pagenum", pagenum);
result.put("searchitem", Slist);
}
}else if (type == XmlPullParser.TEXT){
String s = parser.getText();
// Log.i("text",s);
if ("pagetotal".equals(currentTag)){
maxpage = s;
currentTag = null;
}else if ("pagesize".equals(currentTag)){
pagesize = s;
currentTag = null;
}else if ("pagenum".equals(currentTag)){
pagenum = s;
currentTag = null;
}else if ("book".equals(currentTag)){
Search_data.setbookname(s);
currentTag = null;
}else if ("author".equals(currentTag)){
Search_data.setauthor_name(s);
currentTag = null;
}else if ("type".equals(currentTag)){
Search_data.settype(s);
currentTag = null;
}else if ("status".equals(currentTag)){
Search_data.setstatus(Integer.parseInt(s));
currentTag = null;
}else if ("desc".equals(currentTag)){
Search_data.setdesc(s);
currentTag = null;
}else if ("loc".equals(currentTag)){
Search_data.setloc(Integer.parseInt(s));
currentTag = null;
}else if ("picurl".equals(currentTag)){
Search_data.setpicurl(s);
currentTag = null;
}else if ("url".equals(currentTag)){
Search_data.seturl(s);
currentTag = null;
}else if ("chapter".equals(currentTag)){
Search_data.setchapterlast(s);
currentTag = null;
}else if ("chapterurl".equals(currentTag)){
Search_data.setchapterurl(s);
currentTag = null;
}else if ("chaptermd5".equals(currentTag)){
Search_data.setChapter_md5(s);
currentTag = null;
}else if ("chaptercid".equals(currentTag)){
Search_data.setChapter_cid(s);
currentTag = null;
}else if ("site".equals(currentTag)){
Search_data.setsite(s);
currentTag = null;
}else if ("date".equals(currentTag)){
Search_data.setupdatetime(s);
currentTag = null;
}
}
type = parser.next();
}
// Log.v("TAG", "size=" + list.size());
}catch(Exception e){
e.printStackTrace();
}
return result;
}
}