Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XMLResourceParser, I'm not sure how to read the XML that I have [closed]

Tags:

java

android

xml

Here's an example of my XML file:

<?xml version="1.0" encoding="utf-8"?>
<assurances>
<assurance hasReference="true">
    <message>You're Awesome!</message>
    <reference>Genesis 1:26</reference>
</assurance>
<assurance hasReference="true">
    <message>Your Wonderfull!</message>
    <reference>Genesis 1:26</reference>
</assurance>
</assurances>

I'm using code like this to try to retrieve it:

int eventType = -1;
    while(eventType != XmlResourceParser.END_DOCUMENT)
    {
        XmlResourceParser assurances = getResources().getXml(R.xml.assurances); 
        String name = assurances.getText();
        Log.d(TAG, name);

        try {
            if (assurances.getEventType() == XmlResourceParser.START_TAG) {
                String s = assurances.getName();

                if (s.equals("assurance")) {
                    String strMessage = assurances.getAttributeValue(null, "message");
                    String strReference = assurances.getAttributeValue(null, "reference");

                    Log.d(TAG, strMessage);
                    Log.d(TAG, strReference);
                }
            }
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

It's not getting the data and I'm not sure where to go from here.

like image 366
jaysonpowers Avatar asked Apr 01 '13 21:04

jaysonpowers


2 Answers

You don't need to use the getAttributeValue method instead you need to use the getText() method. I have done some changes to your code so if you use below code then it will work fine:

int eventType = -1;
while(eventType != XmlResourceParser.END_DOCUMENT)
{
    XmlResourceParser assurances = getResources().getXml(R.xml.assurances); 
    String name = assurances.getText();
    Log.d(TAG, name);

    try {
        if (assurances.getEventType() == XmlResourceParser.START_TAG) {
            String s = assurances.getName();

            if (s.equals("assurance")) {
                assurances.next();   /// moving to the next node
                if(assurances.getName() != null && assurances.getName().equalsIgnoreCase("message")){
                    String strMessage = assurances.getText();  ///to get value getText() method should be used
                    assurances.next();   ///jumping on to the next node
                String strReference = assurances.getText();  ////similar to above
            }

                Log.d(TAG, strMessage);
                Log.d(TAG, strReference);
            }
        }
    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
like image 149
user_CC Avatar answered Sep 19 '22 23:09

user_CC


Hope this will help you on the way. Regards S

public static void main(String[] args) {
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new File("c:\\_work\\test.xml"));

        //get nodes by name
        NodeList nl = doc.getElementsByTagName("assurance");
        int nbrOfElements = nl.getLength();
        for (int i = 0; i < nbrOfElements; i++) {
            Element e = (Element) nl.item(i);
            System.out.print(e.getTagName());
            System.out.print(":");
            System.out.println(e.getTextContent());
        }
    } catch (Exception ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}
like image 38
stbas Avatar answered Sep 20 '22 23:09

stbas