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

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

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

Парсинг xml-файла - Программирование Android

12.02.2016, 22:39. Просмотров 314. Ответов 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-файла
Посмотрите здесь:

Парсинг xml из файла на сервере - Программирование Android
Добрый день! Есть код, который по идее парсит данные из xml файла, но почему-то не отображается ничего на экране. Где-то ошибка, помогите...

Парсинг XML - Программирование Android
Пробую так String data = getIntent().getStringExtra(&quot;data&quot;); try { DocumentBuilderFactory factory =...

Парсинг XML - Программирование Android
try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder =...

Парсинг XML - Программирование Android
Решил освоить Android написал первое приложение(программка расшифровывает статус контролера банкомата из БД ошибок в формате SQLite и...

Парсинг XML - Программирование Android
Нужно роспарсить XML, который приходть с http://shop.podolyany.com.ua/api/rest/products/. Наверное делаю что-то не так. Вот код, где я хочу...

Парсинг большого xml - Программирование Android
Если есть большой JSON его можно парсить при помощи библиотеки gson, а если есть большой xml как этот https://lenta.ru/rss. Чем его лучше...

Парсинг XML на АНДРОИД - Программирование Android
Суть приложения - парсит XML файл с сервера ( извлекает значение тега &lt;bid&gt;). Выводит это значение в текстовое поле. В процесе отладки...

Парсинг XML по URL - Программирование Android
Нужно взять строку из тега &lt;company&gt; отсюда xml. Можно как-то обойтись без циклов?

XML Парсинг (yml) - Программирование Android
Вопрос таков. Чем распарсить yml страницу http://ufa.farfor.ru/getyml/?key=ukAXxeJYZN Парсил XML с другого сайта, но таким образом не...

XML HTTP парсинг - Программирование Android
Здравствуйте. На сервере есть тестовый php файл с сontent-type: text/xml. Он выводит сообщения с базы....

Парсинг XML документа по URL - Программирование Android
Нужно пропарсить XML документ: http://qps.ru/7UzLc Как я понимаю, есть три варианта: 1) скачать документ на флешку и тогда парсить; ...

Парсинг JSON-файла - Программирование Android
Есть файл со следующим содержимым: т.е. только со значениями! Как его распарсить?? Этот способ не работает: void...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korshun84
21 / 76 / 17
Регистрация: 08.07.2014
Сообщений: 403
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;
            }
        }
    }
}
Ответ Создать тему
Опции темы

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