Search code examples
androiddomparser

Android parsing all tags using Dom parser


i am trying to parse the following xml file using Dom parser.but i am getting the first three Tags (Date, Breakfast,Lunch).how to get all Date,Breakfast and Lunch Tags.

-<Content>
  <Date>2/4/2013</Date>
  <Breakfast>WG Biscuit, Grits, sausage patty, fruit, juice, milk</Breakfast>
  <Lunch>Chicken tenders with sauce, WG affle stick and syrup, carrots-MC, romaine garden salad, fruit, juice, milk</Lunch>
  <Date>2/5/2013</Date>
  <Breakfast>grilleed cheese sandich, grits, fruit, juice, milk</Breakfast>
  <Lunch>meat sauce w/WG pasta, green beans, caesar salad, WW garlic toast, fruit, juice, milk</Lunch>
  <Date>2/6/2013</Date>
  <Breakfast>WG biscuit with chicken patty, fruit, juice, milk</Breakfast>
  <Lunch>WG pizza, spinach salad, WKcorn, fruit, juice, milk</Lunch>
  <Date>2/7/2013</Date>
  <Breakfast>WG french toast sticks (4), sausage links, fruit, juice, milk</Breakfast>
  <Lunch>salisbury steak, black eyed peas, creamed potatoes with gravy, greens-MC, spring mixed salad, WW cornbread, fruit, juice, milk</Lunch>
  <Date>2/8/2013</Date>
  <Breakfast>WG breakfast bagel, yogurt, fruit, juice, milk</Breakfast>
  <Lunch>BBQ rib portion on WG bun, sweet potato fries or yams, romaine garden salad, fruit, juice, milk</Lunch>
  <Date>2/11/2013</Date>
  <Breakfast>Mardi Gras Holiday - No School</Breakfast>
  <Lunch/>
</Content> 

i am using the following code:

StringBuilder sb=new StringBuilder(arg0[0]);
             String findlink=sb.toString();
             try{
                    HttpClient client=new DefaultHttpClient();
                    HttpGet request=new HttpGet();
                    request.setURI(new URI(findlink)) ;

                    HttpResponse response=client.execute(request);
                    //et.setText("its working"); 
                 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

                 DocumentBuilder Builder=factory.newDocumentBuilder();
                 dom=Builder.parse(response.getEntity().getContent());
                 dom.getDocumentElement().normalize();
                  nList5=dom.getElementsByTagName("Content");
                    for(int temp=0;temp<nList5.getLength();temp++)
                    {
                         Node nNode=nList5.item(temp);
                         if(nNode.getNodeType()==Node.ELEMENT_NODE)
                         {
                                    Element eElement=(Element)nNode;
                                    String  base1 =getTagValue("Date",eElement);
                                    Date.add(base1);
                                    String  base2 =getTagValue("Breakfast",eElement);
                                    Breakfast.add(base2);
                                    String  base3 =getTagValue("Lunch",eElement);
                                    Lunch.add(base3);


                          }
                    }

how to parse all tags under content.help me in doing this.


Solution

  • first make sure that your XML data is formatted I mean it should not miss any tag closing and braces <> use any online XML formator to validate your XML. after this try following code.

    XMLParser Function

    /**
     * Getting XML DOM element
     * 
     * @param XML
     *            string
     * */
    public Document getDomElement(String xml) {
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    
        dbf.setCoalescing(true);
        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.

    /**
     * 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));
    }
    

    }

    call above function like this

                Document doc = parser.getDomElement(yourXMLString);
                NodeList nl = doc.getElementsByTagName("Content");
    
                for (int i = 0; i < nl.getLength(); i++) {
    
                    Element e = (Element) nl.item(i);
    
                    // Get your Data Here
    
                                    String  base1 =getTagValue("Date",eElement);
                                    Date.add(base1);
                                    String  base2 =getTagValue("Breakfast",eElement);
                                    Breakfast.add(base2);
                                    String  base3 =getTagValue("Lunch",eElement);
                                    Lunch.add(base3);
    
            }
    

    Change your XML Like this

    <Contents>
    <content>
    <Date>2/4/2013
    </Date>
    <Breakfast>WG Biscuit, Grits, sausage patty, fruit, juice, milk
    </Breakfast>
    <Lunch>Chicken tenders with sauce, WG affle stick and syrup, carrots-MC, romaine garden salad, fruit, juice, milk
    </Lunch>
    </content>
    <content>
    <Date>2/5/2013
    </Date>
    <Breakfast>grilleed cheese sandich, grits, fruit, juice, milk
    </Breakfast>
    <Lunch>meat sauce w/WG pasta, green beans, caesar salad, WW garlic toast, fruit, juice, milk
    </Lunch>
    </content>
    <content>
    <Date>2/6/2013
    </Date>
    <Breakfast>WG biscuit with chicken patty, fruit, juice, milk
    </Breakfast>
    <Lunch>WG pizza, spinach salad, WKcorn, fruit, juice, milk
    </Lunch>
    </content>
    <content>
    <Date>2/7/2013
    </Date>
    <Breakfast>WG french toast sticks (4), sausage links, fruit, juice, milk
    </Breakfast>
    <Lunch>salisbury steak, black eyed peas, creamed potatoes with gravy, greens-MC, spring mixed salad, WW cornbread, fruit, juice, milk
    </Lunch>
    </content>
    <content>
    <Date>2/8/2013
    </Date>
    <Breakfast>WG breakfast bagel, yogurt, fruit, juice, milk
    </Breakfast>
    <Lunch>BBQ rib portion on WG bun, sweet potato fries or yams, romaine garden salad, fruit, juice, milk
    </Lunch>
    </content>
    <content>
    <Date>2/11/2013
    </Date>
    <Breakfast>Mardi Gras Holiday - No School
    </Breakfast>
    <Lunch />
    </content>
    </Contents>
    

    and call this NodeList nl = doc.getElementsByTagName("Content");