从Web解析XML [英] Parsing XML from web

查看:91
本文介绍了从Web解析XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个Android应用程序,我会从Web读取XML文件,但无法正常工作.我是Android的新手,不知道为什么它不起作用.这是我的代码,有人可以帮我吗?

I'm developing an Android app, I would read an XML file from web but it doesn't work. I'm new on Android and I don't know why it doesn't work. This is my code, could someone help me, please?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    intent = getIntent();

    try {

        FilmList = new ArrayList<MyFilm>();

        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();

        URL input = new URL("URL");
        xpp.setInput(input.openStream(), null);

        int eventType = xpp.getEventType();
        String currentTag = null;

        String title = null;
        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG) {
                currentTag = xpp.getName();
            } else if (eventType == XmlPullParser.TEXT) {
                if ("title".equals(currentTag)) {
                    title = xpp.getText();
                    FilmList.add(new MyFilm(title));
                }
            } 
            }
            eventType = xpp.next();



        adapter = new FilmsAdapterView(this,FilmList);
        setListAdapter(adapter);
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

这是我的XML文件.

And this is my XML file.

<?xml version="1.0" encoding="utf-8"?>
<root>
<movie>
    <number>
        1
    </number>
    <o_title>
        Godfather, The
    </o_title>
    <title>
        Il padrino
    </title>
    <director>
        Francis Ford Coppola
    </director>
    <year>
        1972
    </year>
    <classification>

    </classification>
    <country>
        USA
    </country>
    <genre>
        Drammatico
    </genre>
    <rating>
        9
    </rating>
    <runtime>
        175
    </runtime>
    <studio>

    </studio>
    <seen>
        1
    </seen>
    <loaned>
        0
    </loaned>
    <o_site>

    </o_site>
    <site>
        http://www.mymovies.it/dizionario/recensione.asp?id=17401
    </site>
    <trailer>
        http://www.mymovies.it/trailer/?id=17401
    </trailer>
    <plot>
        Quando nel 1945, dopo aver dominato per due generazioni un clan di mafia italoamericana,     Don Vito Corleone muore, suo figlio Michael accetta con riluttanza di occuparsi degli affari di famiglia. Imparerà presto. Da un romanzo (1969) di Mario Puzo che l'ha sceneggiato con il regista, è la storia di un sistema familiare e di clan con sottofondo nostalgico per la forza di quei legami che nell'America di oggi sembrano svalutati (come fu letto dalla maggioranza del pubblico), ma possiede anche una profonda e fertile ambiguità. C'è il parallelismo mafia-politica che diventa equivalenza nel Padrino-Parte II; c'è la magistrale ricostruzione di un'epoca e di una morale del crimine, di una struttura patriarcale più italiana che americana. Coppola sa di cosa parla e ne sa le ragioni anche se non le condivide: il suo sguardo è più distaccato che affascinato. Spaccò la critica in due ed ebbe ovunque un grande successo. 7 nomine e 3 Oscar: film, sceneggiatura e M. Brando.AUTORE LETTERARIO: Mario Puzo
    </plot>
    <cast>
        Marlon Brando come Don Vito Corleone
James Caan come Sonny Corleone
Al Pacino come Michael Corleone
Robert Duvall come Tom Hagen
Diane Keaton come Kay Adams
Richard Castellano come Peter Clemenza
Sterling Hayden come Mcluskey
John Marley come Jack Woltz
Richard Conte come Don Emilio Barzini
Al Lettieri come Virgil 'il Turco' Sollozzo
Abe Vigoda come Sal Tessio
Talia Shire come Connie Rizzi
Gianni Russo come Carlo Rizzi
John Cazale come Fredo Corleone
Salvatore Corsetto come Bonasera
Rudy Bond come Cuneo
Julie Gregg come Sandra Corleone
Tony Giorgio come Bruno Tattaglia
Morgana King come Mama Corleone
Franco Citti come Calò
Richard Bright come Al Neri
Corrado Gaipa come Don Tommasino
Victor Rendina come Philip Tattaglia
Saro Urzì come Vitelli
Simonetta Stefanelli come Apollonia
Cardell Sheridan come La signora Clemenza
Vito Scotti come Nazorine
Angelo Infanti come Fabrizio
Alex Rocco come Moe Greene
Lenny Montana come Luca Brasi
John Martino come Paulie Gatto
Tere Livrano come Theresa Hagen
Jeannie Linero come Lucy Mancini
Al Martino come Johnny Fontane
Salvatore Corsitto come Bonasera
Ardell Sheridan come Mrs. Clemenza
    </cast>
    <notes>

    </notes>
    <poster_md5>

    </poster_md5>
    <volumes_name>

    </volumes_name>
    <collections_name>

    </collections_name>
    <media_name>

    </media_name>
    <image>

    </image>
</movie>
<movie>
    <number>
        2
    </number>
    <o_title>
        Lucy
    </o_title>
    <title>
        Lucy
    </title>
    <director>
        Luc Besson
    </director>
    <year>
        2014
    </year>
    <classification>

    </classification>
    <country>
        USA, Francia
    </country>
    <genre>
        Azione
    </genre>
    <rating>
        5
    </rating>
    <runtime>
        90
    </runtime>
    <studio>

    </studio>
    <seen>
        1
    </seen>
    <loaned>
        0
    </loaned>
    <o_site>

    </o_site>
    <site>
        http://www.mymovies.it/dizionario/recensione.asp?id=78667
    </site>
    <trailer>
        http://www.mymovies.it/trailer/?id=78667
    </trailer>
    <plot>
        Lucy è una studentessa che vive a Taiwan. Si trova costretta a consegnare una valigetta dal contenuto misterioso a un criminale coreano, Mr. Jang. Costui, una volta verificato ciò che gli è stato portato, sequestra la ragazza. Le fa inserire nel corpo uno dei pacchetti ricevuti che contiene una sostanza di cui dovrebbe essere la passiva trasportatrice. Non sarà così perché il pacchetto si rompe e il prodotto chimico viene assorbito dal suo corpo il quale progressivamente sviluppa una capacità di conoscenza e di potere inimmaginabili per chi non sia, come il professor Norman, un neuro ricercatore.

Che Luc Besson ami mettere al centro di molte sue opere personaggi femminili coinvolti in esperienze che ne mutano profondamente la vita è testimoniato dalla sua filmografia. Sappiamo  quanto sono lontane tra loro, nel tempo e nell'azione, Nikita e la Aung San Suu Kyi di The Lady ma al contempo vicine per capacità di resistenza, di forza d'animo, di sguardo verso possibili mutamenti che i maschi faticano a sostenere. Lucy si aggiunge a loro in un film che si struttura come un puzzle narrativo e visivo di cui si può cogliere la reale sostanza solo se se ne sanno pazientemente ricomporre i pezzi e si rinuncia a ricorrere agli stereotipi valutativi, che da sempre vengono applicati al cinema di Besson, per guardare più in profondità. Perché l'assunto iniziale è legato alle neuro scienze e ci ricorda che il nostro cervello ha sviluppato solo una piccolissima parte delle sue potenzialità rispetto all'homo sapiens (non dimentichiamo che Lucy è il nome che è stato dato alla prima donna di cui l'antropoarcheologia abbia conoscenza). Cosa accadrebbe se si passasse progressivamente dalla potenza all'atto, se i neuroni attivi aumentassero percentualmente? È questa la domanda iniziale su cui si innesta l'azione di una supereroina suo malgrado (come tanti personaggi Marvel) che combatte contro il Male impersonato da un cattivissimo Choi Min Sik (molti lo ricorderanno in Oldboy e in Lady Vendetta). Qui ci si possono attendere le già citate facili banalizzazioni su un Besson incapace di resistere alla tentazione fumettistico-adrenalinica (vedi la corsa in auto nel centro di Parigi e non solo). Se si guarda però più nel profondo ci si può accorgere che il più americano dei registi francesi mentre sembra servire al grande pubblico un mix di SuperQuark e di Science fiction in realtà sta esponendo una sorta di trattato sul Tao. Chiunque abbia confidenza con i principi di questa filosofia potrà ritrovarli utilizzati a marcare le tappe del percorso della protagonista. &quot;Vuota la tua mente di tutti i pensieri; lascia che il tuo cuore trovi la pace. Studia la complessità del mondo, ma contemplane il ritorno. Il ritorno alla sorgente è la serenità. Se non realizzi la fonte finirai con il confonderti e il dispiacerti. Quando comprenderai da dove provieni, diventerai naturalmente tollerante, comprensivo, multiforme&quot;. Questo si legge nel Daodejing ed è quanto si scorge in controluce in Lucy. Besson, interpellato in materia, non conferma ma neanche smentisce.
    </plot>
    <cast>
        Scarlett Johansson come Lucy
Morgan Freeman come Professor Norman
Amr Waked come Pierre Del Rio
Choi Min-sik come Kang
Pilou Asbæk come Richard
Analeigh Tipton come Caroline
Mason Lee come
Claire Tran come
Frédéric Chau come
Jan Oliver Schroeder come
Yvonne Gradelet come
Renaud Cestre come
Cedric Chevalme come
Paul Chan come
    </cast>
    <notes>

    </notes>
    <poster_md5>

    </poster_md5>
    <volumes_name>

    </volumes_name>
    <collections_name>

    </collections_name>
    <media_name>

    </media_name>
    <image>

    </image>
</movie>
</root>

谢谢大家!

推荐答案

首先,没有AsyncTask,您将无法访问Internet位置.您不能在主thread上执行此操作.去谷歌上查询. 其次,xpp.next()应该已经放置在循环内. 第三,@ Kamuy的解决方案也可以使用,但是在以下相同的情况下.

First of all, you can not access internet locations without an AsyncTask. You can not do that on the main thread. Google it. Secondly, xpp.next() should have been placed inside the loop. Thirdly, @Kamuy's solution works too but in the same scenario as below.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new WebService() {

        @Override
        protected Object doInBackground(Object... params) {
            try {
                List<String> arr = new ArrayList<String>();

                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                factory.setNamespaceAware(true);
                XmlPullParser xpp = factory.newPullParser();

                URL input = new URL("http://whatdowedo.altervista.org/griffith_list.xml");
                xpp.setInput(input.openStream(), null);
                //
                int eventType = xpp.getEventType();
                String currentTag = null;
                //
                String title = null;
                while (eventType != XmlPullParser.END_DOCUMENT) {
                    if (eventType == XmlPullParser.START_TAG) {
                        currentTag = xpp.getName();
                    } else if (eventType == XmlPullParser.TEXT) {
                        if ("title".equals(currentTag)) {
                            title = xpp.getText().trim();
                            if(title.length()>0) {
                                arr.add(title);
                                System.out.println(title);
                            }
                        }
                    }
                    eventType = xpp.next();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }.execute();
}

abstract class WebService extends AsyncTask<Object, Void, Object> {

    public WebService() {
        super();
    }

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected abstract Object doInBackground(Object... params);

    @Override
    protected void onPostExecute(Object result) {
    }

}

FilmList替换String数组,应该就这些了. 只是说声谢谢.

Replace the String array with your FilmList and that should be all. Just say thanks.

这篇关于从Web解析XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆