【问题标题】:How to parse the below xml in android?如何在android中解析下面的xml?
【发布时间】:2015-09-22 14:55:31
【问题描述】:

我有一个如下所述的 xml。

<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>

我可以使用 xmlpull 解析器逐个节点进行解析,如下所示。

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;
}

但我的要求略有不同。我想制作包含 id 作为键和所有子节点的标签,即。文本节点作为标签 id 的值。

我为此付出了很多努力。你能在这方面帮助我吗?谢谢

【问题讨论】:

    标签: android xml


    【解决方案1】:

    试试这个解决方案-

    将 Hashmap 添加到 ArrayList。因此,您将拥有一个格式为“key”:“value”类型的 hashmap 列表。

    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;
        }
    }
    

    希望对你有帮助。

    【讨论】:

    • 我还有一个要求。请找到下面的xml。
    • 我想将此 labelid 与之前的 labelid 进行比较,如果匹配,我需要相应地显示 syn 组名称。你能帮我解决这个问题吗?
    【解决方案2】:

    替换

    hm.put("id", labelid);
    hm.put("details",details);
    

    hm.put(labelid, details);
    

    【讨论】:

    • 嘿科迪,谢谢。但我只得到文本节点的最后一个值。即只有 DE 作为语言和 Morgan Sync 作为值。我没有得到 EN 和早上同步
    猜你喜欢
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2013-10-04
    • 2018-03-03
    • 2014-05-13
    • 1970-01-01
    相关资源
    最近更新 更多