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

XMLPullParser чтение русских символов - Android

Восстановить пароль Регистрация
 
Eddie_Brock
0 / 0 / 0
Регистрация: 12.10.2013
Сообщений: 3
12.10.2013, 23:23     XMLPullParser чтение русских символов #1
Здравствуйте. Согласно заданию, необходимо написать парсер, который будет эммм... парсить(масло масленое) вот эту вот страницу http://www.cbr.ru/scripts/XML_News.asp
До первой русской буквы, т.е. И в слове Информация все вроде как идет неплохо, а дальше выкидывает со словами well-formed (invalid token). Я так понимаю, проблема в кодировке. Вот собственно парсер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public List<HashMap<String, String>> MyParse(InputStream iStream) 
            throws XmlPullParserException, IOException{
        try{
            XmlPullParser MParser = Xml.newPullParser();
            MParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            MParser.setInput(iStream, "UTF-8");
            MParser.nextTag();
//            Log.d("Parser", MParser.toString());
            return BeginParsingNews(MParser);
        }
        finally{
            iStream.close();
        }
    }
Вот так непосредственно текст читается, после определения конкретного тега вызывается функция readText:
Java
1
2
3
4
5
6
7
8
9
10
private String readText(XmlPullParser MParser) 
            throws IOException, XmlPullParserException {
        // TODO Auto-generated method stub
        String result = "";
        if(MParser.next() == XmlPullParser.TEXT) {
            result = MParser.getText();
            MParser.nextTag();
        }
        return result;
    }
Гуглил, менял кодировки в setInput, ставил null, windows-1251 и даже вот так HTTP.UTF-8, не знай, зачем правда. Это моя 2я прога в Android, да и вообще опыта программирования не то чтобы много. На форуме к слову в первый раз спрашиваю, так что камнями не закидывайте плз, если что-то не так спросил или оформил. Прогу сдавать уже скоро, поэтому времени, чтобы еще 2-3 дня сидеть гуглить, у меня нет.

Добавлено через 5 минут
На всякий случай скину весь код парсера:
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
package com.example.myfuck;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.io.InputStream;
import org.apache.http.protocol.HTTP;
 
import android.util.Log;
import android.util.Xml;
 
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
 
public class MyParser {
    
    private static final String fStr = null;
    
    public List<HashMap<String, String>> MyParse(InputStream iStream) 
            throws XmlPullParserException, IOException{
        try{
            XmlPullParser MParser = Xml.newPullParser();
            MParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            MParser.setInput(iStream, "UTF-8");
            MParser.nextTag();
//            Log.d("Parser", MParser.toString());
            return BeginParsingNews(MParser);
        }
        finally{
            iStream.close();
        }
    }
    
    private List<HashMap<String, String>> BeginParsingNews(
            XmlPullParser MParser) throws IOException, XmlPullParserException {
        // TODO Auto-generated method stub
        List<HashMap<String, String>> MyList = new ArrayList<HashMap<String,String>>();
        
        MParser.require(XmlPullParser.START_TAG, fStr, "News");
        
        while(MParser.next() != XmlPullParser.END_TAG) {
            if(MParser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String name = MParser.getName();
            if(name.equals("Item")){
                MyList.add(readItem(MParser));
            }
            else{
                skip(MParser);
            }
        }
        return MyList;
    }
    
    private HashMap<String, String> readItem(XmlPullParser MParser) 
            throws IOException, XmlPullParserException {
        // TODO Auto-generated method stub
        MParser.require(XmlPullParser.START_TAG, fStr, "Item");
        
        String dateItem = "";
        String urlItem = "";
        String titleItem = "";
        
        while (MParser.next() != XmlPullParser.END_TAG) {
            if(MParser.getEventType() != XmlPullParser.START_TAG){
                continue;
            }
            
            String name = MParser.getName();
            
            if(name.equals("Date")) {
                dateItem = readDate(MParser);
            } else if (name.equals("Url")) {
                urlItem = readUrl(MParser);
            } else if (name.equals("Title")) {
                titleItem = readTitle(MParser);
            } else {
                skip(MParser);
            }
        }
        
        String data = "Url: " + urlItem + "\n" +
                      "Title: " + titleItem;
        
        HashMap<String, String> hMap = new HashMap<String, String>();
        hMap.put("Date", dateItem);
        hMap.put("Data", data);
        
        return hMap;
    }
    
    private String readDate(XmlPullParser MParser) 
            throws XmlPullParserException, IOException {
        // TODO Auto-generated method stub
        MParser.require(XmlPullParser.START_TAG, fStr, "Date");
        String date = readText(MParser);
        MParser.require(XmlPullParser.END_TAG, fStr, "Date");
        return date;
    }
    
    private String readUrl(XmlPullParser MParser) 
            throws XmlPullParserException, IOException {
        // TODO Auto-generated method stub
        MParser.require(XmlPullParser.START_TAG, fStr, "Url");
        String url = readText(MParser);
        MParser.require(XmlPullParser.END_TAG, fStr, "Url");
        return url;
    }
    
    private String readTitle(XmlPullParser MParser) 
            throws XmlPullParserException, IOException {
        // TODO Auto-generated method stub
        MParser.require(XmlPullParser.START_TAG, fStr, "Title");
        String title = readText(MParser);
        MParser.require(XmlPullParser.END_TAG, fStr, "Title");
        return title;
    }
    
    private String readText(XmlPullParser MParser) 
            throws IOException, XmlPullParserException {
        // TODO Auto-generated method stub
        String result = "";
        if(MParser.next() == XmlPullParser.TEXT) {
            result = MParser.getText();
            MParser.nextTag();
        }
        return result;
    }
    
    private void skip(XmlPullParser MyParsing) 
            throws XmlPullParserException, IOException {
        // TODO Auto-generated method stub
        if(MyParsing.getEventType() != XmlPullParser.START_TAG) {
            throw new IllegalStateException();
        }
        int depth = 1;
        while (depth != 0) {
            switch (MyParsing.next()) {
            case XmlPullParser.END_TAG:
                depth--;
                break;
            case XmlPullParser.START_TAG:
                depth++;
                break;
            }
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2013, 23:23     XMLPullParser чтение русских символов
Посмотрите здесь:

XmlPullParser неправильно получает значения Android
Чтение из БД Android
Чтение из файла Android
Чтение смс Android
Android Чтение русских символов. Отрицательные значения у символов
Android Чтение данных БД
Android XmlPullParser - проверка существования атрибута
Android Отправка по сети русских букв
Ввод русских букв в эмуляторе Genymotion Android
Android Медленный XmlPullParser
Android Самозакрывающийся тег XmlPullParser
RSS reader by XmlPullParser + Listview Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Salty_Sugar
 Аватар для Salty_Sugar
26 / 26 / 1
Регистрация: 02.04.2012
Сообщений: 140
13.10.2013, 15:54     XMLPullParser чтение русских символов #2
Вот что то нагуглил
С сервера xml приходит в какой кодировке?
Если utf-8 то попробуйте result = EntityUtils.toString(httpEntity, "UTF-8");
Eddie_Brock
0 / 0 / 0
Регистрация: 12.10.2013
Сообщений: 3
13.10.2013, 17:16  [ТС]     XMLPullParser чтение русских символов #3
да у меня совсем иначе чтение происходит, но спасибо за отклик.
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
14.10.2013, 01:45     XMLPullParser чтение русских символов #4
А ISO-8859-1 вы не пробовали ?
Java
1
2
parser.setInput(is, "ISO-8859-1");
String str = new String(parser.nextText().getBytes("ISO-8859-1"), "Windows-1251");
Eddie_Brock
0 / 0 / 0
Регистрация: 12.10.2013
Сообщений: 3
14.10.2013, 15:45  [ТС]     XMLPullParser чтение русских символов #5
с ISO-8859-1 парсер, как я понял, не может EndTag найти из каких-то соображений.
Yandex
Объявления
14.10.2013, 15:45     XMLPullParser чтение русских символов
Ответ Создать тему
Опции темы

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