My xml is as follows...In this how can I get NAME attribute from status tag using DOM xml
parsing...
<tickets type="array">
<ticket>
<ticket-id type="integer">6</ticket-id>
<status>
<id type="integer">1706729</id>
<name>Completed</name>
<colour>black</colour>
</status>
</ticket>
<ticket>
<ticket-id type="integer">5</ticket-id>
<status>
<id type="integer">1706929</id>
<name>New</name>
<colour>White</colour>
</status>
</ticket>
</tickets>
-
androidhive.info/2011/11/android-xml-parsing-tutorialDeepanker Chaudhary– Deepanker Chaudhary2012-12-24 07:23:00 +00:00Commented Dec 24, 2012 at 7:23
-
Thanx for replay..but look at my xml it is nested..and tutorial you suggest me contains simple xml.Ketan Ahir– Ketan Ahir2012-12-24 07:45:30 +00:00Commented Dec 24, 2012 at 7:45
-
Use getElementbyTag("ticket") one time & make a loop & after that again use inside loop getElementbyTag("status") & get all values which you wantDeepanker Chaudhary– Deepanker Chaudhary2012-12-24 07:49:18 +00:00Commented Dec 24, 2012 at 7:49
-
I tried it but not workindg...can you put some sample code ?Ketan Ahir– Ketan Ahir2012-12-24 08:02:47 +00:00Commented Dec 24, 2012 at 8:02
-
give url for this xml then i'll tryDeepanker Chaudhary– Deepanker Chaudhary2012-12-24 08:10:24 +00:00Commented Dec 24, 2012 at 8:10
Add a comment
|
1 Answer
This way you should be able to get what you are looking for
String xml = "<tickets type=\"array\"><ticket><ticket-id type=\"integer\">6</ticket-id><status><id type=\"integer\">1706729</id><name>Completed</name><colour>black</colour></status></ticket><ticket><ticket-id type=\"integer\">5</ticket-id><status><id type=\"integer\">1706929</id><name>New</name><colour>White</colour></status></ticket></tickets>";
Log.e("xml parsing ", xml);
try {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
domFactory.setIgnoringComments(true);
domFactory.setIgnoringElementContentWhitespace(true);
domFactory.setCoalescing(true);
DocumentBuilder domBuilder = null;
Document document = null;
try {
domBuilder = domFactory.newDocumentBuilder();
}
catch (ParserConfigurationException parserConfigurationException) {
Logger.log(Logger.LEVEL_ERROR, FrameworkHelper.class.getName(), "getDocumentRoot", "ParserConfigurationException caught while creating DocumentBuilder object, " + parserConfigurationException.getMessage());
}
document = domBuilder.parse(new ByteArrayInputStream(xml.getBytes()));//try catch
NodeList ticketList = document.getElementsByTagName("ticket");
for (int i = 0; i < ticketList.getLength(); i++) {
Element ticketNode = (Element) ticketList.item(i);
String tickets = ticketNode.getNodeValue();
NodeList statusList = ticketNode.getElementsByTagName("status");
for (int j = 0; j < statusList.getLength(); j++) {
Element statusNode = (Element) statusList.item(j);
String statuses = statusNode.getNodeValue();
NodeList nameList = statusNode.getElementsByTagName("name");
for (int k = 0; k < nameList.getLength(); k++) {
Element nameNode = (Element) nameList.item(k);
String names = nameNode.getChildNodes().item(0).getNodeValue();
Toast.makeText(this, "name: " + names,
Toast.LENGTH_SHORT).show();
}
}
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
However if hierarchy is not important to be maintained and you just want to deal with names independently you can as well directly call getElementsByTagName("name")
1 Comment
stack_ved
kettu, i have edited my code above , please check and confirm!