package czd.lib.data;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class XMLUtil {
public static ArrayList<Object> parse(InputStream is, Class<?> cls, List<String> fields, List<String> elements, String itemelement) {
ArrayList<Object> result = new ArrayList<Object>();
try
{
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "UTF-8");
int event_type = parser.getEventType();
Object obj = null;
String name = "";
while (event_type != XmlPullParser.END_DOCUMENT)
{
switch (event_type)
{
case XmlPullParser.START_DOCUMENT:
result.clear();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if (itemelement.equals(name))
{
obj = cls.newInstance();
}
if (obj != null && elements.contains(name))
{
setFieldValue(obj, fields.get(elements.indexOf(name)), parser.nextText());
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (itemelement.equals(name))
{
result.add(obj);
obj = null;
}
break;
default:
break;
}
event_type = parser.next();
}
} catch (XmlPullParserException e)
{
e.printStackTrace();
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
is.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
return result;
}
private static void setFieldValue(Object obj, String name, Object value) {
Field field;
try
{
field = obj.getClass().getDeclaredField(name);
field.setAccessible(true);
field.set(obj, value);
} catch (NoSuchFieldException e)
{
e.printStackTrace();
} catch (IllegalArgumentException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
}