XML Parsing Issue (Multiple Tags)

fbn

New Member
I am parsing XML using a DOM parser but I seem to have come across an issue, I have \[code\]XML\[/code\] data structured like the following:\[code\] <Bookings> <BookingNo>12345678</BookingNo> <Pickup> <AddressLine>Line 1</AddressLine> <AddressLine>Line 2</AddressLine> <AddressLine>Line 3</AddressLine> <AddressLine>Line 4</AddressLine> <AddressLine>Line 5</AddressLine> <Postcode> <PostcodeOut>pstOut</PostcodeOut> <PostcodeIn>pstIn</PostcodeIn> </Postcode> <AddressCoords> <Latitude>1.12345670</Latitude> <Longitude>-1.1234567890</Longitude> </AddressCoords> </Pickup> <Destination> <AddressLine>Line 1</AddressLine> <AddressLine>Line 2</AddressLine> <AddressLine>Line 3</AddressLine> <Postcode> <PostcodeOut>pstOut</PostcodeOut> <PostcodeIn>pstIn</PostcodeIn> </Postcode> <AddressCoords> <Latitude>1.1234567890</Latitude> <Longitude>-1.1234567890</Longitude> </AddressCoords> </Destination> <PickupTime>DateTime</PickupTime> <DestinationTime>DateTime</DestinationTime> <VehicleType>Car</VehicleType> <NumberOfPassengers>1</NumberOfPassengers> <Passengers> <PassengerName>Name</PassengerName> <PassengerContactNo>123456</PassengerContactNo> </Passengers> <Mileage>2</Mileage></Bookings>\[/code\]The problem that I am having is that I need to get the \[code\]AddressLine\[/code\] from both \[code\]pickup\[/code\] and \[code\]destination\[/code\] but they need to be separate, with the current code I have, I am pulling them in separately but I am only pulling in the first line (Line 1) of both. The \[code\]XML\[/code\] parser code I am using is:\[code\]public class XMLParser { // constructor public XMLParser() { } /** * Getting XML from URL making HTTP request * @param url string * */ public String getXmlFromUrl(String url) { String xml = null; try { // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); xml = EntityUtils.toString(httpEntity); InputStream is = new ByteArrayInputStream(xml.getBytes("UTF-8")); BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sbtwo = new StringBuilder(); String myfeed = null; while ((myfeed = reader.readLine()) != null) { final String newjsontwo = myfeed.replaceAll( "throw 'allowIllegalResourceCall is false.';", ""); sbtwo.append(newjsontwo); } is.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // return XML return xml; } /** * Getting XML DOM element * @param XML string * */ 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; } /** Getting node value * @param elem element */ 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 ""; } /** * Getting node value * @param Element node * @param key string * */ public String getValue(Element item, String str) { NodeList n = item.getElementsByTagName(str); return this.getElementValue(n.item(0)); }\[/code\]and the code within my main activity is:\[code\]XMLParser parser = new XMLParser(); Document doc = parser.getDomElement(xml); // getting DOM references = new ArrayList<String>(); NodeList nl = doc.getElementsByTagName("Bookings"); NodeList nlpickup = doc.getElementsByTagName("Pickup"); NodeList nldestination = doc .getElementsByTagName("Destination"); AddressData = http://stackoverflow.com/questions/13762429/new StringBuilder(); // looping through all item nodes <item> for (int i = 0; i < nl.getLength(); i++) { HashMap<String, String> map = new HashMap<String, String>(); Element e = (Element) nl.item(i); resultCode = parser.getValue(e,"BookingNo"); Pickup = parser.getValue(e, "Pickup"); DateTime = parser.getValue(e, "PickupTime"); Element etwo = (Element) nlpickup.item(i); PAddressTwo = parser.getValue(etwo, "AddressLine"); // System.out.println("/// "+ AddressData); // System.out.println("/////"+parser.getValue(etwo, // "AddressLine")); PPostIn = parser.getValue(etwo, "PostcodeOut"); PPostOut = parser.getValue(etwo, "PostcodeIn"); Element ethree = (Element) nldestination.item(i); DAddressOne = parser.getValue(ethree, "AddressLine"); DPostIn = parser.getValue(ethree, "PostcodeOut"); DPostOut = parser.getValue(ethree, "PostcodeIn"); splitDate(); map.put("BookNo", resultCode); map.put("Datetime", TimeFinal + " on " + DateFinal); map.put("PickupAddress", PAddressTwo + " " + PPostIn + " " + PPostOut); map.put("DestinationAddress", DAddressOne + " " + DPostIn + " " + DPostOut); references.add(resultCode); mylist.add(map); } adapter = new SimpleAdapter( MyJourney.this, mylist, R.layout.myjourneys_item, new String[] { "BookNo", "Datetime", "PickupAddress", "DestinationAddress" }, new int[] { R.id.journeysRefText, R.id.journeysDateText, R.id.journeysFromText, R.id.journeysToText }); }\[/code\]Where am I going wrong?I know that there is something called a SAX parser but I can find an example to match what i am looking for.
 
Back
Top