Sunday, 19 October 2014

XML Parsing by DOM Parser



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