Андроид; парсинг XML в Textview

Я хочу проанализировать XML, данные которого различаются на основе идентификатора (можно сказать, в табличной форме) и показать его в Textviews (по одному идентификатору за раз). Можете ли вы мне помочь в этом отношении ?? Желательно в XML PullParser, как это рекомендовано андроидом

Я хочу, чтобы значения XML помещались в текстовые представления по одному на основе их идентификаторов.

<myXmlStarts>
<Id>1</id>
<EnglishData>"this is 1st English line"</EnglishData>
<UrduData>"this is 1st Urdu line"</UrduData>
</myXmlStarts>

<myXmlStarts>
<Id>2</id>
<EnglishData>"this is 2nd English line"</EnglishData>
<UrduData>"this is 2nd Urdu line"</UrduData>
</myXmlStarts>

person Mohammed Ahmad Osama    schedule 04.04.2015    source источник


Ответы (1)


Вы можете сделать что-то вроде,

public class TestClass {


    static String text;

       public static void main (String args[])
                 throws XmlPullParserException, IOException
             {
                 XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                 factory.setNamespaceAware(true);
                 XmlPullParser xpp = factory.newPullParser();


                 List<Model> listData = new ArrayList<Model>();
                 Model model = null;
                 String xmlString = "<myXmlStarts><Id>1</Id><EnglishData>this is 1st English line</EnglishData><UrduData>this is 1st Urdu line</UrduData></myXmlStarts><myXmlStarts><Id>2</Id><EnglishData>this is 2nd English line</EnglishData><UrduData>this is 2nd Urdu line</UrduData></myXmlStarts>";
                 xpp.setInput(new StringReader (xmlString));
                 int eventType = xpp.getEventType();
                 while (eventType != XmlPullParser.END_DOCUMENT) {

                     String tagname = xpp.getName();

                     switch (eventType) {
                        case XmlPullParser.START_TAG:

                              if (tagname.equalsIgnoreCase("myXmlStarts")) {
                                   System.out.println("<myXmlStarts>");

                                   model = new Model();
                                }                         

                            break;

                        case XmlPullParser.TEXT:
                            text = xpp.getText();
                            break;

                        case XmlPullParser.END_TAG:

                            if (tagname.equalsIgnoreCase("myXmlStarts")) {
                                   System.out.println("</myXmlStarts>");
                                 listData.add(model);
                            } 

                            if (tagname.equalsIgnoreCase("Id")) {
                                   System.out.println("Id is : " +text);
                                   model.setId(text);
                                } 

                            if (tagname.equalsIgnoreCase("EnglishData")) {
                                   System.out.println("english data is : " +text);
                                   model.setEngData(text);
                                } 

                            if (tagname.equalsIgnoreCase("UrduData")) {
                                   System.out.println("urdudata is : " +text);
                                   model.setUrduData(text);
                            } 


                            // ....add what are the tags you want


                        default:
                            break;

                    }

                  eventType = xpp.next();
                 } // end of while loop


                 System.out.println("Array list size : " +listData.size());
                 int listSize = listData.size();


                 for (int i = 0; i < listSize; i++) {

                     System.out.println("Id : " + listData.get(i).getId());
                     System.out.println("Id : " + listData.get(i).getEngData());
                     System.out.println("Id : " + listData.get(i).getUrduData());

                }

             }

}

Модель.класс

public class Model {

    String id, engData, urduData;

    public String getEngData() {
        return engData;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public void setEngData(String engData) {
        this.engData = engData;
    }
    public String getUrduData() {
        return urduData;
    }
    public void setUrduData(String urduData) {
        this.urduData = urduData;
    }

}

Выход :

<myXmlStarts>
Id is : 1
english data is : this is 1st English line
urdudata is : this is 1st Urdu line
</myXmlStarts>
<myXmlStarts>
Id is : 2
english data is : this is 2nd English line
urdudata is : this is 2nd Urdu line
</myXmlStarts>
Array list size : 2
Id : 1
Id : this is 1st English line
Id : this is 1st Urdu line
Id : 2
Id : this is 2nd English line
Id : this is 2nd Urdu line

Что я сделал, так это

  1. Создал модель для Id, English Data, UruduData.
  2. Объявлен ArraList с параметром Model.
  3. Всякий раз, когда он видит myXmlStarts как START_TAG, он просто инициализирует класс модели. (модель = новая модель();)
  4. Вы просто добавляете в модель, как только она находит END_TAG как Id, EnglishData и т. д.
  5. Но если он находит END_TAG как myXmlStarts, он просто добавляет его к ArrayList (listData.add(model);), и то же самое происходит до конца документа.

Теперь у вас есть все данные в ArrayList. Просто добавьте эти значения в textView. Я только что закончил твою половину работы. Отдыхай, надо попробовать. Удачи.

ПРИМЕЧАНИЕ:

У вас ошибка в тегах xml.

Сдача

<Id>1</id>

to

<Id>1</Id> <-- closing and opening tag name should be same. Not `i` once and 'I' later. Good luck.
person Yuva Raj    schedule 11.04.2015