Simple Xml Parsing with DOM Parser
1. Sept :- XML Parser.
we use this for xml parsing
XMLParser.java
public class XMLParser {
public String getXmlFromUrl(String url, Context context) {
String xml = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,
new Integer(1 * 60 * 1000));
params.setParameter(CoreConnectionPNames.SO_TIMEOUT, new Integer(
1 * 60 * 1000));
HttpConnectionParams.setTcpNoDelay(params, true);
httpClient.setParams(params);
HttpPost httpPost = new HttpPost(url);
BasicHttpResponse httpResponse = (BasicHttpResponse) httpClient
.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
xml = URLDecoder.decode(EntityUtils.toString(httpEntity),
HTTP.UTF_8);
} catch (ConnectTimeoutException e) {
xml = "timeout";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// return XML
return xml;
}
public String innerXml(Node node) {
String str = "";
try {
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
"yes");
transformer
.transform(new DOMSource(node), new StreamResult(buffer));
str = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
public Document getDomElement(String xml) {
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
doc = db.parse(is);
} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
return null;
}
return doc;
}
public final String getElementValue(Node elem) {
Node child;
if (elem != null) {
if (elem.hasChildNodes()) {
for (child = elem.getFirstChild(); child != null; child = child
.getNextSibling()) {
if (child.getNodeType() == Node.TEXT_NODE) {
return child.getNodeValue();
}
}
}
}
return "";
}
public String getValue(Element item, String str) {
NodeList n = (item).getElementsByTagName(str);
return this.getElementValue(n.item(0));
}
}
2. Make one class for xml parsing
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
class aTask extends AsyncTask<Void, Void, Void> {
int succ = 0;
ArrayList<HashMap<String, String>> alDData = new ArrayList<HashMap<String, String>>();
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
try {
String url = "http://";
XMLParser xp = new XMLParser();
String response = xp.getXmlFromUrl(url, MainActivity.this);
Document doc = xp.getDomElement(response);
NodeList nl = doc.getElementsByTagName("response");
for (int i = 0; i < nl.getLength(); i++) {
Element element = (Element) nl.item(i);
if (xp.getValue(element, "success").equals("1")) {
succ = 1;
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("lat",
xp.getValue(element, "lat"));
hm.put("lng",
xp.getValue(element, "lng"));
hm.put("sImage", CompleteFilePath);
alDData.add(hm);
}
} else
succ = 0;
Log.d("testing", response);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (succ == 1 && alDData.size() > 0) {
llNoDriver.setVisibility(View.GONE);
Log.e("testing", "> " + alDData);
ListAdapter adapter = new ListAdapter(activity,
alDData);
lvList.setAdapter(adapter);
} else {
lvList.setAdapter(null);
}
}
}
3. Your adapter
CustomAdapter.java
public class CustomAdapter extends ArrayAdapter<HashMap<String, String>> {
ArrayList<HashMap<String, String>> alData;
HashMap<String, String> hm;
Activity activity;
public CustomAdapter(Context context,
ArrayList<HashMap<String, String>> alData) {
super(context, R.layout.custom_list, alData);
this.alData = alData;
this.activity = (Activity) context;
}
static class myHolder {
TextView tvname, tvinfo;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
try {
if (view == null) {
view = activity.getLayoutInflater().inflate(
R.layout.custom_list, null, false);
myHolder mh = new myHolder();
mh.tvname = (TextView) view.findViewById(R.id.tvname);
mh.tvinfo = (TextView) view.findViewById(R.id.tvinfo);
view.setTag(mh);
}
} catch (Exception e) {
// TODO: handle exception
}
return view;
}
}
This is Simple way for xml parsing.. thanks
No comments:
Post a Comment