Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to parse the below xml in android?

Tags:

android

xml

I'm having a xml as mentioned below.

<labels> 
    <label id="lblMS">
        <text language="EN" value="Morning Sync"/>
        <text language="DE" value="Morgan Sync"/>
    </label>
    <label id="lblES">
        <text language="EN" value="Evening Sync"/>
        <text language="DE" value="Sync Abend"/>
    </label>
    <label id="lblAS">
        <text language="EN" value="Afternoon Sync"/>
        <text language="DE" value="Sync Afternoon"/>
    </label>
</labels>

I can able to parse using the xmlpull parser node by node as shown below.

private HashMap<String, String> readCountry(XmlPullParser parser) 
            throws XmlPullParserException, IOException
{   
    parser.require(XmlPullParser.START_TAG, ns, "label");
    String labelid = parser.getAttributeValue(ns, "id");
    String textlan = "";
    String textval="";
    String capital="";
    String currencyCode="";
    String currency="";

    while(parser.next() != XmlPullParser.END_TAG){
        if(parser.getEventType() != XmlPullParser.START_TAG){
            continue;
        }

        String name = parser.getName();
         if(name.equals("text")){
             textlan = parser.getAttributeValue(ns, "language");
             textval = parser.getAttributeValue(ns,"value");
            readCapital(parser);
        }else{
            skip(parser);
        }
    }

    String details =    "Language : " + textlan + "\n" +
                        "Value : " + textval + "\n";


    HashMap<String, String> hm = new HashMap<String, String>();
    hm.put("id", labelid);
    hm.put("details",details);       

    return hm;
}

But my requirement is little different. I want make the label which contains id as the key and all the child nodes ie. text nodes as the value for the label id.

I'm struggling a lot to do this. Could you please help me in this regard.Thank you

like image 786
coders Avatar asked Mar 16 '26 07:03

coders


1 Answers

Try this solution-

Add the Hashmap to ArrayList. So you will have a list of hashmaps in the format of "key" : "value" type.

private HashMap<String, String> readCountry(XmlPullParser parser) 
            throws XmlPullParserException, IOException
{   
    parser.require(XmlPullParser.START_TAG, ns, "label");
    String labelid = parser.getAttributeValue(ns, "id");
    String textlan = "";
    String textval="";
    String capital="";
    String currencyCode="";
    String currency="";

    HashMap<String, String> hm = new HashMap<String, String>();
    ArrayList<HashMap> al=new ArrayList<HashMap>();

    while(parser.next() != XmlPullParser.END_TAG){
        if(parser.getEventType() != XmlPullParser.START_TAG){
            continue;
        }

        String name = parser.getName();
         if(name.equals("text")){
             textlan = parser.getAttributeValue(ns, "language");
             textval = parser.getAttributeValue(ns,"value");
            readCapital(parser);

            String details =    "Language : " + textlan + "\n" +
                        "Value : " + textval + "\n";
            hm.put(labelid, details);
            al.add(hm);
        }else{
            skip(parser);
        }
    }
    someArray = compareXMLValues(timeSessionId,al);
    //return al;
    return someArray;
}



compareXMLValues(timeSessionId,al)
{
    parse full XML of syncgroupsettings;
    And compare if (timeSessionId == parser.getAttributeValue(ns, "labelid"))
    {
    if it is true-
    read from while loop, syncgroupname and store in Array list of Strings.
    }
    else
    {
    continue;
    }
}

Hope it helps.

like image 99
bozzmob Avatar answered Mar 18 '26 20:03

bozzmob



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!