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

Парсинг XML документа по URL - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.85
LukeSkywalker
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 16
10.12.2012, 17:57     Парсинг XML документа по URL #1
Нужно пропарсить XML документ: http://qps.ru/7UzLc
Как я понимаю, есть три варианта:
1) скачать документ на флешку и тогда парсить;
2) напрямую в парсер;
3) в стринг-перменную, а потом её парсить.
Вот сам парсер (DOM):
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
// XML-parser and output.
                try {
                    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
                    //Document doc = docBuilder.parse(new File("/mnt/sdcard/download/weather.ashx.xml"));
                    Document doc = docBuilder.parse(new URL("http://free.worldweatheronline.com/feed/weather.ashx?q=Kijew&format=xml&num_of_days=3&key=c17b22aeea083658120612").openStream());         
 
                    // Normalize text representation.
                    doc.getDocumentElement ().normalize ();
                    //
                    NodeList listOfPersons = doc.getElementsByTagName("request");
 
                    for(int s=0; s<listOfPersons.getLength() ; s++){
                        Node firstPersonNode = listOfPersons.item(s);
                        if(firstPersonNode.getNodeType() == Node.ELEMENT_NODE){
                            Element firstPersonElement = (Element)firstPersonNode;
                            //----
                            NodeList firstNameList = firstPersonElement.getElementsByTagName("query");
                            Element firstNameElement = (Element)firstNameList.item(0);
                            NodeList textFNList = firstNameElement.getChildNodes();
                            
                            textView1.setText("City: " + 
                                   ((Node)textFNList.item(0)).getNodeValue().trim());                           
                        }
                    }
                }catch (SAXParseException err) {
                textView2.setText("** Parsing error" + ", line " 
                     + err.getLineNumber () + ", uri " + err.getSystemId ());
                textView2.setText(" " + err.getMessage ());
 
                }catch (SAXException e) {
                Exception x = e.getException ();
                ((x == null) ? e : x).printStackTrace ();
 
                }catch (Throwable t) {
                t.printStackTrace ();
                }
                //System.exit (0);
            }           
                                                    
        };
В коде использован второй вариант: напрямую в парсер, но ничего не происходит.
Опыта у меня мало, сколько не пробовал сделать по примерам из интернета, так и ничего не получилось. Помогите, пожалуйста! Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2012, 17:57     Парсинг XML документа по URL
Посмотрите здесь:

Android Парсинг xml из файла на сервере
Android Парсинг XML
Парсинг XML Android
Android Парсинг XML на АНДРОИД
Android Парсинг XML
Парсинг XML по URL Android
XML HTTP парсинг Android
Android Парсинг XML с помощью Jsoup
Парсинг XML Android
Парсинг xml-файла Android
Android Парсинг большого xml
Android XML Парсинг (yml)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
flashok
 Аватар для flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
11.12.2012, 18:07     Парсинг XML документа по URL #2
вот вам пример http://stackoverflow.com/questions/8...android-device
LukeSkywalker
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 16
11.12.2012, 20:28  [ТС]     Парсинг XML документа по URL #3
Спасибо за наводку, только вот там
Java
1
phoneNumberList.add(line.getTextContent());
- это тэги к стринговой переменной добавляются? Как мне сделать, чтобы тэгы добавлялись в TextView?
flashok
 Аватар для flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
12.12.2012, 11:40     Парсинг XML документа по URL #4
ну вот выдрал из соседней темы
помойму все понятно

TextView resultingDate = (TextView) findViewById(R.id.resultingDate);
resultingDate.setText("lol");
LukeSkywalker
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 16
12.12.2012, 19:19  [ТС]     Парсинг XML документа по URL #5
Ну у меня практически тоже самое:
Java
1
2
textView1 = (TextView) findViewById(R.id.textView1);
textView1.setText(line.getTextContent());
Но ничего не происходит!

Вот, можете проверить, если не верите:
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
package com.example.coursework;
 
import java.net.URL;
import java.net.URLConnection;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends Activity {
    
    TextView textView1;
    TextView textView2;
    Button btnRfrsh;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // Finding new objects.
        textView1 = (TextView) findViewById(R.id.textView1);
        textView2 = (TextView) findViewById(R.id.textView2);
        btnRfrsh = (Button) findViewById(R.id.btnRfrsh);
        
        // Handler of Refresh button press.
        OnClickListener oclbtnRfrsh = new OnClickListener() {       
            @Override
            public void onClick(View v) {
                
                try {
                    URL url = new URL("http://free.worldweatheronline.com/feed/weather.ashx?q=Kijew&format=xml&num_of_days=3&key=c17b22aeea083658120612");
                    URLConnection conn = url.openConnection();
 
                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder builder = factory.newDocumentBuilder();
                    Document doc = builder.parse(conn.getInputStream());
 
                    NodeList nodes = doc.getElementsByTagName("request");
                    for (int i = 0; i < nodes.getLength(); i++) {
                        Element element = (Element) nodes.item(i);
                        NodeList title = element.getElementsByTagName("city");
                        Element line = (Element) title.item(0);
                        //phoneNumberList.add(line.getTextContent());
                        textView1.setText(line.getTextContent());
                    }
                }
                catch (Exception e) {
                    e.printStackTrace();
                }               
 
            }           
                                                    
        };
        
        // Assign handler to Refresh button.
        btnRfrsh.setOnClickListener(oclbtnRfrsh);
        
    }
 
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
}
XML
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
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="14dp"
        android:layout_marginTop="24dp"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />
 
    <Button
        android:id="@+id/btnRfrsh"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="25dp"
        android:text="Button" />
 
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/btnRfrsh"
        android:layout_marginLeft="76dp"
        android:layout_toRightOf="@+id/btnRfrsh"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />
 
</RelativeLayout>
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
12.12.2012, 19:51     Парсинг XML документа по URL #6
Эм ... если вам частно надо парсить из разных урлов хмлины то я бы вам посоветовал автоматизировать процесс используюя фрэймворки для маппинга хмл и обьектов. Simple XML фрэймворк подходит. Если юзаете какой нить рестфул сервис который отдаёт всё в хмл - без такого рода либ трудно.
Yandex
Объявления
12.12.2012, 19:51     Парсинг XML документа по URL
Ответ Создать тему
Опции темы

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