Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
pdmitriya
8 / 8 / 1
Регистрация: 29.01.2015
Сообщений: 56
#1

Парсинг xml-файла - Android

12.02.2016, 22:39. Просмотров 292. Ответов 2
Метки нет (Все метки)

Пытаюсь получить информацию из xml файла, но всегда получаю ошибку. Как это можно исправить?


/res/xml/support.xml
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<support>
    <title type="text">Title page</title>
    <summary type="html">
        Google Inc. is an American multinational technology company specializing in Internet-related services and products. These include online advertising technologies, search, cloud computing, and software
    </summary>
    <link href="https://google.com" />
</support>

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package com.mycompany.myapp;
 
import android.app.Activity;
import android.app.AlertDialog;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity {
 
    final Context context = this;
    private Button button;
 
    public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        button = (Button) findViewById(R.id.buttonAlert);
 
        // add button listener
        button.setOnClickListener(new OnClickListener() {
 
                @Override
                public void onClick(View arg0) {
                    alert(arg0);
                }
            });
    }
    public void alert(View arg0) {
 
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            context);
        String s;
        Entry entry = parse();
        if(entry.title != null) 
            s = entry.title;
        else s= "fail";
        // set title
        alertDialogBuilder.setTitle(s);
 
        alertDialogBuilder.setMessage(s);
 
        // set dialog message
        alertDialogBuilder
            .setCancelable(false)
            .setNegativeButton("No",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    MainActivity.this.finish();
                }
            });
 
        // create alert dialog
        AlertDialog alertDialog = alertDialogBuilder.create();
 
        // show it
        alertDialog.show();
    }
 
    //do etogo mesta nichego izmenyat' nel'zya
 
    private static final String ns = null;
    
    public static class Entry
    {
        public final String title;
        public final String link;
        public final String summary;
 
        private Entry(String title, String summary, String link) {
            this.title = title;
            this.summary = summary;
            this.link = link;
        }
    }
    public Entry parse() {
        String title = null;
        String summary = null;
        String link = null;
        
        try{
            XmlPullParser parser = getResources().getXml(R.xml.support);
            parser.nextTag();
            parser.require(XmlPullParser.START_TAG, null, "support");
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                String name = parser.getName();
                if (name.equals("title")) {
                    title = readTitle(parser);
                } else if (name.equals("summary")) {
                    summary = readText(parser);
                } else if (name.equals("link")) {
                    link = readLink(parser);
                } else {
                    skip(parser);
                }
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return new Entry(title, summary, link);
    }
    private String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlPullParser.START_TAG, ns, "title");
        String title = readText(parser);
        parser.require(XmlPullParser.END_TAG, ns, "title");
        return title;
    }
    private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
        String result = "";
        if (parser.next() == XmlPullParser.TEXT) {
            result = parser.getText();
            parser.nextTag();
        }
        return result;
    }
    private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
        String link = "";
        parser.require(XmlPullParser.START_TAG, ns, "link");
        String tag = parser.getName();
        if (tag.equals("link")) {
            link = parser.getAttributeValue(null, "href");
            parser.nextTag();
        }
        parser.require(XmlPullParser.END_TAG, ns, "link");
        return link;
    }
    private void skip(XmlPullParser parser) throws IOException, XmlPullParserException {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            throw new IllegalStateException();
        }
        int depth = 1;
        while (depth != 0) {
            switch (parser.next()) {
                case XmlPullParser.END_TAG:
                    depth--;
                    break;
                case XmlPullParser.START_TAG:
                    depth++;
                    break;
            }
        }
    }
}
System.err: org.xmlpull.v1.XmlPullParserException: Binary XML file line #-1: expected start or end tag (position:Binary XML file line #-1)
System.err: at android.content.res.XmlBlock$Parser.nextTag(XmlBlock.java:303)
System.err: at com.mycompany.myapp.MainActivity.parse(MainActivity.java:85)
System.err: at com.mycompany.myapp.MainActivity.alert(MainActivity.java:40)
System.err: at com.mycompany.myapp.MainActivity$100000000.onClick(MainActivity.java:32)
System.err: at android.view.View.performClick(View.java:5204)
System.err: at android.view.View$PerformClick.run(View.java:21156)
System.err: at android.os.Handler.handleCallback(Handler.java:739)
System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
System.err: at android.os.Looper.loop(Looper.java:148)
System.err: at android.app.ActivityThread.main(ActivityThread.java:5466)
System.err: at java.lang.reflect.Method.invoke(Native Method)
System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Вложения
Тип файла: zip MyApp.zip (856.8 Кб, 0 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2016, 22:39     Парсинг xml-файла
Посмотрите здесь:

Android Парсинг XML документа по URL
Android Парсинг xml из файла на сервере
Android Парсинг XML
Парсинг XML Android
Android Парсинг XML на АНДРОИД
Android Парсинг XML
Парсинг XML по URL Android
XML HTTP парсинг Android
Android Парсинг XML с помощью Jsoup
Парсинг XML Android
Android Парсинг большого xml
Android XML Парсинг (yml)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korshun84
13 / 68 / 14
Регистрация: 08.07.2014
Сообщений: 359
12.02.2016, 23:12     Парсинг xml-файла #2
Навскидку: может не нравиться <link href="https://google.com" />
pdmitriya
8 / 8 / 1
Регистрация: 29.01.2015
Сообщений: 56
13.02.2016, 23:30  [ТС]     Парсинг xml-файла #3
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<message>
    <title>Title page</title>
        <summary>
        Google Inc. is an American multinational technology company specializing in Internet-related services and products. These include online advertising technologies, search, cloud computing, and software
    </summary>
    <link href="https://google.com" />
</message>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package com.mycompany.myapp;
 
import android.app.Activity;
import android.app.AlertDialog;
import java.io.IOException;
import android.content.res.XmlResourceParser;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity {
 
    final Context context = this;
    private Button button;
 
    public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        button = (Button) findViewById(R.id.buttonAlert);
 
        // add button listener
        button.setOnClickListener(new OnClickListener() {
 
                @Override
                public void onClick(View arg0) {
                    alert(arg0);
                }
            });
    }
    public void alert(View arg0) {
 
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            context);
        
        Entry entry = parse();
        // set title
        alertDialogBuilder.setTitle( entry.title );
 
        alertDialogBuilder.setMessage( entry.summary );
        
        String s = entry.link;
 
        // set dialog message
        alertDialogBuilder
            .setCancelable(false)
            .setNegativeButton(s,new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    MainActivity.this.finish();
                }
            });
 
        // create alert dialog
        AlertDialog alertDialog = alertDialogBuilder.create();
 
        // show it
        alertDialog.show();
    }
 
    //do etogo mesta nichego izmenyat' nel'zya
 
    private static final String ns = null;
    
    public static class Entry
    {
        public final String title;
        public final String link;
        public final String summary;
 
        private Entry(String title, String summary, String link) {
            this.title = title;
            this.summary = summary;
            this.link = link;
        }
    }
    public Entry parse() {
        String title = null;
        String summary = null;
        String link = null;
        
        try{
            XmlResourceParser parser = getResources().getXml(R.xml.support);
                do {
                    parser.next();              
                } while(parser.getEventType() != XmlResourceParser.START_TAG);
                
                parser.require(XmlResourceParser.START_TAG, ns, "message");
            while (parser.next() != XmlResourceParser.END_TAG) {
               if(parser.getEventType() != XmlResourceParser.START_TAG) {
                continue;
               }
               String name = parser.getName();
               if (name.equals("title")) {
                title = readTitle(parser);
               } else if (name.equals("summary")) {
                summary = readText(parser);
               } else if (name.equals("link")) {
                link = readLink(parser);
               } else {
                skip(parser);
               }
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return new Entry(title, summary, link);
    }
    private String readTitle(XmlResourceParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlResourceParser.START_TAG, ns, "title");
        String title = readText(parser);
        parser.require(XmlResourceParser.END_TAG, ns, "title");
        return title;
    }
    private String readText(XmlResourceParser parser) throws IOException, XmlPullParserException {
        String result = "";
        if (parser.next() == XmlResourceParser.TEXT) {
            result = parser.getText();
            parser.nextTag();
        }
        return result;
    }
    private String readLink(XmlResourceParser parser) throws IOException, XmlPullParserException {
        String link = "";
        parser.require(XmlResourceParser.START_TAG, ns, "link");
        String tag = parser.getName();
        if (tag.equals("link")) {
            link = parser.getAttributeValue(null, "href");
            parser.nextTag();
        }
        parser.require(XmlResourceParser.END_TAG, ns, "link");
        return link;
    }
    private void skip(XmlResourceParser parser) throws IOException, XmlPullParserException {
        if (parser.getEventType() != XmlResourceParser.START_TAG) {
            throw new IllegalStateException();
        }
        int depth = 1;
        while (depth != 0) {
            switch (parser.next()) {
                case XmlResourceParser.END_TAG:
                    depth--;
                    break;
                case XmlResourceParser.START_TAG:
                    depth++;
                    break;
            }
        }
    }
}
Yandex
Объявления
13.02.2016, 23:30     Парсинг xml-файла
Ответ Создать тему
Опции темы

Текущее время: 09:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru