Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
pdmitriya
8 / 8 / 4
Регистрация: 29.01.2015
Сообщений: 57
1

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

12.02.2016, 22:39. Просмотров 445. Ответов 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)
0
Вложения
Тип файла: zip MyApp.zip (856.8 Кб, 0 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2016, 22:39
Ответы с готовыми решениями:

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

Парсинг XML
try { DocumentBuilderFactory factory =...

Парсинг XML
Нужно роспарсить XML, который приходть с...

Парсинг XML
Пробую так String data = getIntent().getStringExtra(&quot;data&quot;); try...

Парсинг XML
Решил освоить Android написал первое приложение(программка расшифровывает...

2
korshun84
86 / 86 / 22
Регистрация: 08.07.2014
Сообщений: 515
12.02.2016, 23:12 2
Навскидку: может не нравиться <link href="https://google.com" />
0
pdmitriya
8 / 8 / 4
Регистрация: 29.01.2015
Сообщений: 57
13.02.2016, 23:30  [ТС] 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;
            }
        }
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2016, 23:30

Парсинг XML URL
Нужно распарсить XML страницу имея Апи ключ, в инструкции АПИ сказано: &quot;Для...

XML Парсинг (yml)
Вопрос таков. Чем распарсить yml страницу...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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