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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
#1

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

19.12.2013, 15:56. Просмотров 1375. Ответов 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>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 15:56     Парсинг XML
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
21.12.2013, 21:14  [ТС]     Парсинг XML #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
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
17.01.2014, 13:54     Парсинг XML #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.
chizz
979 / 493 / 54
Регистрация: 19.03.2013
Сообщений: 3,079
Записей в блоге: 18
Завершенные тесты: 1
17.01.2014, 14:05     Парсинг XML #4
Convert InputSource to String of Character Array
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
17.01.2014, 14:11     Парсинг XML #5
А можно поподробней?
chizz
979 / 493 / 54
Регистрация: 19.03.2013
Сообщений: 3,079
Записей в блоге: 18
Завершенные тесты: 1
17.01.2014, 14:22     Парсинг XML #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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2014, 15:42     Парсинг XML
Еще ссылки по теме:

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

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

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

Парсинг XML с помощью Jsoup - Программирование Android
Всем добрый день. Пишу андроид приложение. Использую библиотеку jsoup. Возникла проблема с парсингом xml. Есть такой кусок на...


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

Или воспользуйтесь поиском по форуму:
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
17.01.2014, 15:42     Парсинг XML #7
Огромное спасибо!!!
Yandex
Объявления
17.01.2014, 15:42     Парсинг XML
Ответ Создать тему
Опции темы

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