Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
spydark91
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
#1

Парсинг XML - Программирование Android

19.12.2013, 15:56. Просмотров 1509. Ответов 6
Метки нет (Все метки)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
try {
                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder builder = factory.newDocumentBuilder();
                    Document doc = builder.parse(new InputSource(new ByteArrayInputStream(ans.getBytes("utf-8"))));
                    NodeList nodes = doc.getElementsByTagName("usersReiting");
                    for (int i = 0; i<51; i++) {
                        Element element = (Element) nodes.item(i);  
                        NodeList title = element.getElementsByTagName("string");
                        for (int j = 0; j < 5; j++) { 
                            Element line = (Element) title.item(j);
                            Log.d(line.getAttribute("name"),((Node) line).getTextContent());    
                        }                   
                    }           
                } catch (ParserConfigurationException e1) {
                    e1.printStackTrace();
                } catch (SAXException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
12-19 11:49:00.666: E/AndroidRuntime(407): FATAL EXCEPTION: AsyncTask #1
12-19 11:49:00.666: E/AndroidRuntime(407): java.lang.RuntimeException: An error occured while executing doInBackground()
12-19 11:49:00.666: E/AndroidRuntime(407): at android.os.AsyncTask$3.done(AsyncTask.java:200)
12-19 11:49:00.666: E/AndroidRuntime(407): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
12-19 11:49:00.666: E/AndroidRuntime(407): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
12-19 11:49:00.666: E/AndroidRuntime(407): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
12-19 11:49:00.666: E/AndroidRuntime(407): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
12-19 11:49:00.666: E/AndroidRuntime(407): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-19 11:49:00.666: E/AndroidRuntime(407): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-19 11:49:00.666: E/AndroidRuntime(407): at java.lang.Thread.run(Thread.java:1019)
12-19 11:49:00.666: E/AndroidRuntime(407): Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 36: http://p.yomu.ru/2.php?fio=null null null
12-19 11:49:00.666: E/AndroidRuntime(407): at java.net.URI.create(URI.java:776)
12-19 11:49:00.666: E/AndroidRuntime(407): at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
12-19 11:49:00.666: E/AndroidRuntime(407): at com.p.generalScreen_1$GetReit.doInBackground(generalScreen_1.java:84)
12-19 11:49:00.666: E/AndroidRuntime(407): at com.p.generalScreen_1$GetReit.doInBackground(generalScreen_1.java:1)
12-19 11:49:00.666: E/AndroidRuntime(407): at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-19 11:49:00.666: E/AndroidRuntime(407): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
12-19 11:49:00.666: E/AndroidRuntime(407): ... 4 more


структура документа
XML
1
2
3
4
5
6
7
8
9
10
11
<usersReiting>
    <user>
        <string ... >...</string>
        ....
    </user>
    еще 49 повторений тега <user>
    <iUser>
        <string ... >...</string>
        ....
    </iUser>
</userReiting>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 15:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Парсинг XML (Программирование Android):

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

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

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

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

Парсинг большого xml
Если есть большой JSON его можно парсить при помощи библиотеки gson, а если...

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

6
spydark91
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
21.12.2013, 21:14  [ТС] #2
Java
1
2
3
4
5
6
7
                    Document doc = builder.parse(new InputSource(new ByteArrayInputStream(ans.getBytes("utf-8"))));
                    NodeList nodes = doc.getElementsByTagName("usersReiting");
                    Element element = (Element) nodes.item(0);
                    NodeList nodes1 = element.getElementsByTagName("user");
                    Element element1 = (Element) nodes1.item(0);
                    NodeList nodes2 = element1.getElementsByTagName("string");
                    Element element2 = (Element) nodes2.item(0);
хочу получить первую самую строку тега <string> из первого тега <user>
но падает
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
12-21 17:12:22.374: D/id(575): 1
12-21 17:12:22.504: D/aa(575): ssss
12-21 17:12:23.104: W/dalvikvm(575): threadid=9: thread exiting with uncaught exception (group=0x40015560)
12-21 17:12:23.204: E/AndroidRuntime(575): FATAL EXCEPTION: AsyncTask #1
12-21 17:12:23.204: E/AndroidRuntime(575): java.lang.RuntimeException: An error occured while executing doInBackground()
12-21 17:12:23.204: E/AndroidRuntime(575):  at android.os.AsyncTask$3.done(AsyncTask.java:200)
12-21 17:12:23.204: E/AndroidRuntime(575):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
12-21 17:12:23.204: E/AndroidRuntime(575):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
12-21 17:12:23.204: E/AndroidRuntime(575):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
12-21 17:12:23.204: E/AndroidRuntime(575):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
12-21 17:12:23.204: E/AndroidRuntime(575):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-21 17:12:23.204: E/AndroidRuntime(575):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-21 17:12:23.204: E/AndroidRuntime(575):  at java.lang.Thread.run(Thread.java:1019)
12-21 17:12:23.204: E/AndroidRuntime(575): Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 36: [url]http://p.yomu.ru/2.php?fio=null[/url] null null
12-21 17:12:23.204: E/AndroidRuntime(575):  at java.net.URI.create(URI.java:776)
12-21 17:12:23.204: E/AndroidRuntime(575):  at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
12-21 17:12:23.204: E/AndroidRuntime(575):  at com.p.generalScreen_1$GetReit.doInBackground(generalScreen_1.java:85)
12-21 17:12:23.204: E/AndroidRuntime(575):  at com.p.generalScreen_1$GetReit.doInBackground(generalScreen_1.java:1)
12-21 17:12:23.204: E/AndroidRuntime(575):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-21 17:12:23.204: E/AndroidRuntime(575):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
12-21 17:12:23.204: E/AndroidRuntime(575):  ... 4 more
0
VictorAkira
3 / 3 / 1
Регистрация: 21.03.2013
Сообщений: 71
17.01.2014, 13:54 #3
Дабы не создавать еще тему.
Использую пример
Мой код:
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
package com.android.slidingmenuexample;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
 
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
import org.jsoup.select.Elements;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
 
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
 
public class Mir extends Fragment {
    public Integer SDF;
    public ArrayList<String> titleList = new ArrayList<String>();
    public Map<String, String> HtmlHelperMap = new TreeMap<String, String>();
    private ArrayAdapter<String> adapter;
    public List<StringWrapper> wrapperList = new ArrayList<StringWrapper>();
    public CustomAdapter customAdapter;
    private ListView lv;
    public String Url = null; 
    private ProgressDialog pd;  
    public Bitmap bitmap;
    public boolean item = false;
    String rssResult = "";
 
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.mir_layout, null);     
        lv = (ListView) view.findViewById(R.id.News);      
        customAdapter = new CustomAdapter(this.getActivity());          
        new NewThread().execute();      
        customAdapter.setData(wrapperList);;                
        return view;
    }
    public class NewThread extends AsyncTask<String, Void, String> 
    {
        public List<StringWrapper> wrapp = new ArrayList<StringWrapper>();
        @Override
        protected String doInBackground(String... params) 
        {
            
            try 
            {
                URL rssUrl = new URL("http://katolik.ru/mir.feed?type=rss");
                SAXParserFactory factory = SAXParserFactory.newInstance();
                SAXParser saxParser = factory.newSAXParser();
                XMLReader xmlReader = saxParser.getXMLReader();            
                RSSHandler rssHandler = new RSSHandler();
                xmlReader.setContentHandler(rssHandler);
                InputSource inputSource = new InputSource(rssUrl.openStream());
                xmlReader.parse(inputSource);
                wrapp.add(new StringWrapper(rssResult, "Та дА!"));
                
            } 
            catch (Exception e) 
            {
                wrapp.add(new StringWrapper("Ошибка", "Большая Ошибка"));
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(String result) 
        {
            wrapperList.addAll(wrapp);
            customAdapter.setData(wrapperList);
            lv.setAdapter(customAdapter);
            customAdapter.notifyDataSetChanged();               
        }       
        
    }   
     private class RSSHandler extends DefaultHandler {
 
            public void startElement(String uri, String localName, String qName, 
    Attributes attrs) throws SAXException {
                if (localName.equals("item"))
                    item = true;
 
                if (!localName.equals("item") && item == true)
                    rssResult = rssResult + localName + ": " ;
 
            }
 
            public void endElement(String namespaceURI, String localName, 
    String qName) throws SAXException {
 
            }
 
            public void characters(char[] ch, int start, int length)
                    throws SAXException {
                String cdata = new String(ch, start, length);
                if (item == true)
                    rssResult = rssResult +(cdata.trim()).replaceAll("\\s+",  " ")+"\t";
 
            }
 
        }
 
}
Вопрос!
Как получить просто тело xml?
Ибо для соминого парсинга я использую другой более интересный парсер. Но для него мне надо получить XML в переменную String.
0
chizz
983 / 500 / 101
Регистрация: 19.03.2013
Сообщений: 3,101
Записей в блоге: 19
Завершенные тесты: 1
17.01.2014, 14:05 #4
Convert InputSource to String of Character Array
0
VictorAkira
3 / 3 / 1
Регистрация: 21.03.2013
Сообщений: 71
17.01.2014, 14:11 #5
А можно поподробней?
0
chizz
983 / 500 / 101
Регистрация: 19.03.2013
Сообщений: 3,101
Записей в блоге: 19
Завершенные тесты: 1
17.01.2014, 14:22 #6
А еще лучше - не используй SAX InputSource, раз уж собрался другим парсером парсить. Используй InputStream

Добавлено через 2 минуты
InputStream input = new URL("http://katolik.ru/mir.feed?type=rss").openStream();
А потом. http://stackoverflow.com/questions/3...am-to-a-string
1
VictorAkira
3 / 3 / 1
Регистрация: 21.03.2013
Сообщений: 71
17.01.2014, 15:42 #7
Огромное спасибо!!!
0
17.01.2014, 15:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2014, 15:42
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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