Autore Topic: [facile] Parsing XML tramite DOM  (Letto 25470 volte)

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
[facile] Parsing XML tramite DOM
« il: 29 Marzo 2010, 22:09:06 CEST »
+5
Livello di difficoltà: facile
Versione SDK utilizzata: >1.5
Link al file compresso del progetto eclipse: file in allegato

Salve a tutti,
vorrei mostrarvi come è possibile fare il parsing di un documento XML tramite il Document Object Model.

A differenza del parsing tramite SAX, che legge il documento e fa scattare degli eventi (metodi dell'handler) ad ogni tag incontrato, il parsing tramite DOM legge la struttura ad albero di un XML. A discrezione dell'utente (programmatore) la struttura letta potrà essere direttamente interrogata (nel codice si capisce meglio di cosa si tratta).

Per documenti XML relativamente semplici, questo tipo di parsing risulta sicuramente più immediato e semplice da implementare.
Tuttavia, per strutture con albero xml troppo profondo, questo metodo potrebbe risultare scomodo, e sarebbe quindi meglio optare per il sax parsing.

Vorrei osservare, che queste operazioni (DOM e SAX parsing) sono inerenti a Java più che ad android, ma visto che molte persone si avvicinano a questo fantastico linguaggio grazie ad android, ritengo giusto condividere questo tipo di informazioni su questa board.

Vediamo il documento che vogliamo analizzare:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<messages>
        <note id="p501">
          <to>Carlo</to>
          <from>Luca</from>
          <heading>Promemoria</heading>
          <body>Ricordati gli appunti!</body>
        </note>
       
        <note id="p502">
          <to>Luca</to>
          <from>Carlo</from>
          <heading>Re: Promemoria</heading>
          <body>Ok, mi ricorderò!</body>
        </note>
</messages>

Creiamo una classe che rappresenta una nota:
Codice (Java): [Seleziona]
public class MyNote {
        private String body;
        private String heading;
        private String from;
        private String to;
        private String id;
       
        public String getId() {
                return id;
        }

        public void setId(String id) {
                this.id = id;
        }

        public String getFrom() {
                return from;
        }

        public void setFrom(String from) {
                this.from = from;
        }

        public String getTo() {
                return to;
        }

        public void setTo(String to) {
                this.to = to;
        }

        public String getHeading() {
                return heading;
        }

        public void setHeading(String heading) {
                this.heading = heading;
        }

        public String getBody() {
                return body;
        }

        public void setBody(String body) {
                this.body = body;
        }

        @Override
        public String toString() {
                return "MyNote [id=" + id  + ", from=" + from + ", to=" + to +", heading="
                                + heading + ",body=" + body+ "]";
        }
}

Creiamo una classe che gestisce il parsing: (potremmo utilizzare un metodo, ma in questo modo rendiamo più pulito e riutilizzabile il tutto)
Se eliminate i metodi di debug e le chiamate a questi metodi, vi accorgerete della semplicità di questo tipo di parsing(nel caso vi sembrasse troppo lungo :P).

Codice (Java): [Seleziona]
public class MyParser {
        static void vDebug(String debugString){         //metodi di convenienza
                Log.v("DomParsing", debugString+"\n");
        }
        static void eDebug(String debugString){
                Log.e("DomParsing", debugString+"\n");
        }
       
        ArrayList<MyNote> parsedData=new ArrayList<MyNote>(); //struttura dati che immagazzinerà i dati letti
        public ArrayList<MyNote> getParsedData() {  //metodo di accesso alla struttura dati
                return parsedData;
        }

    public void parseXml(String xmlUrl){
               
                Document doc;
                try {
                                               
                        doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new URL(xmlUrl).openStream());
                        //Costruiamo il nostro documento a partire dallo stream dati fornito dall'URL
                        Element root=doc.getDocumentElement();
                        //Elemento(nodo) radice del documento
                       
                        vDebug("Root element :" + root.getNodeName());
                        vDebug("");
                       
                        //NodeList notes=root.getElementsByTagName("note"); //potremmo direttamente prendere gli elementi note
                        NodeList notes=root.getChildNodes();
                        //ma prediamo tutti i "figli" diretti di root. Utile se non avessimo solo "note" come figli di root
                       
                        for(int i=0;i<notes.getLength();i++){//per ogni
                                Node c= notes.item(i);//nodo
                               
                               
                               
                                if(c.getNodeType()==Node.ELEMENT_NODE){//controlliamo se questo è un nodo elemento (un tag)
                                        //se avessimo usato root.getElementsByTagName("note") questo controllo
                                        //non sarebbe stato necessario
                                       
                                        MyNote newNote=new MyNote(); //costruiamo un oggetto MyNote dove andremo a salvare i dati
                                       
                                        Element note=(Element)c; //cast da nodo a Elemento
                                       
                                        //non controlliamo if(note.getNodeName().equals("note"))  in quanto sappiamo di avere solo "note" come childs
                                       
                                        String id=note.getAttribute("id"); // lettura attributo
                                        vDebug("_Attributo note id:"+id);
                                        vDebug("");
                                       
                                        newNote.setId(id); // settiamo l'id del nostro oggetto MyNote
                                       
                                        NodeList noteDetails=c.getChildNodes();  //per ogni nota abbiamo i vari dettagli
                                        for(int j=0;j<noteDetails.getLength();j++){
                                                Node c1=noteDetails.item(j);
                                               
                                                        if(c1.getNodeType()==Node.ELEMENT_NODE){ //anche in questo caso controlliamo se si tratta di tag
                                                                Element detail=(Element)c1; //cast
                                                                String nodeName=detail.getNodeName(); //leggo il nome del tag
                                                                String nodeValue=detail.getFirstChild().getNodeValue();//leggo il testo in esso contenuto
                                                                vDebug("______Dettaglio:"+nodeName);
                                                                vDebug("______Contenuto Dettaglio:"+nodeValue);
                                                                vDebug("");
                                                               
                                                                //a dipendenza del nome del nodo (del dettaglio) settiamo il relativo valore nell'oggetto
                                                                if(nodeName.equals("from"))
                                                                        newNote.setFrom(nodeValue);
                                                               
                                                                if(nodeName.equals("to"))
                                                                        newNote.setTo(nodeValue);
                                                               
                                                                if(nodeName.equals("heading"))
                                                                        newNote.setHeading(nodeValue);
                                                               
                                                                if(nodeName.equals("body"))
                                                                        newNote.setBody(nodeValue);
                                                               
                                                               
                                                        }
                                               
                                        }
                                        vDebug("");
                               
                                        parsedData.add(newNote); //aggiungiamo il nostro oggetto all'arraylist
                                }
                                                                                               
                        }                      
                //gestione eccezioni
                } catch (SAXException e) {
                        eDebug(e.toString());
                } catch (IOException e) {
                        eDebug(e.toString());
                } catch (ParserConfigurationException e) {
                        eDebug(e.toString());
                } catch (FactoryConfigurationError e) {
                        eDebug(e.toString());
                }
               
        }
   
}

Aggiungiamo questa permission al manifest:
Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.INTERNET"></uses-permission>Usiamo ciò che abbiamo creato:
Codice (Java): [Seleziona]
public class DomParsing extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String xmlUrl="http://www.xxxx.xx/myfiles/messages.xml";
        MyParser parser=new MyParser(); //otteniamo un istanza del nostro parser
        parser.parseXml(xmlUrl);//usiamo il parser
        ((TextView)findViewById(R.id.result)).setText(parser.getParsedData().toString());
        //per semplicità stampiamo il toString (che richiamerà i toString di MyNote) dell'arraylist risultato dal parsing
    }  
}


Nel caso vogliate implementare questa soluzione in una vostra applicazione senza bloccare l'interfaccia utente, potete gestire il tutto usando gli AsyncTask.


Spero che questo semplice tutorial vi sia utile.

Saluti.
Qlimax
« Ultima modifica: 30 Marzo 2010, 00:29:53 CEST da Qlimax »

Offline Vytek

  • Translate Team
  • Utente junior
  • **
  • Post: 125
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 8.1
Re:[facile] Parsing XML tramite DOM
« Risposta #1 il: 21 Aprile 2010, 09:27:25 CEST »
0
Grazie mille fantastico e molto utile! Sto pensando come poter sfruttare il tutto per una sorta di collegamento AJAX :-)

Un saluto...

Offline nocomment17

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
Re:[facile] Parsing XML tramite DOM
« Risposta #2 il: 22 Settembre 2010, 09:43:40 CEST »
0
Ciao,
ho da chiederti se è possibile leggere il file xml dalle risorse del programma: R.xml.filexml

ho provato questo codice ma non funziona:
Codice (Java): [Seleziona]
parse = this.getApplicationContext().getResources().openRawResource(R.xml.exprogram);
...
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(parse);

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:[facile] Parsing XML tramite DOM
« Risposta #3 il: 22 Settembre 2010, 13:47:23 CEST »
+1
ciao nocomment17,

devi mettere il file xml nella cartella

res/raw

e non in

res/xml


poi carichi l' InputStream così:


Codice (Java): [Seleziona]
getApplicationContext().getResources().openRawResource(R.raw.exprogram);

Offline nocomment17

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
Re:[facile] Parsing XML tramite DOM
« Risposta #4 il: 23 Settembre 2010, 08:27:01 CEST »
0
Ti ringrazio, proverò, intanto ho sviluppato una soluzione con SAX.

Offline arma_81_

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
Re:[facile] Parsing XML tramite DOM
« Risposta #5 il: 29 Settembre 2010, 15:56:06 CEST »
0
Ma se ho un file nella cartella /res/xml/miofile.xml e glielo voglio passare come URI,come posso fare ?
Il file miofile.xml deve stare in /res/xml/  oppure in un'altra cartella ?
Spero possiate aiutarmi.
Grazie  ;-)
« Ultima modifica: 29 Settembre 2010, 16:09:25 CEST da arma_81_ »

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:[facile] Parsing XML tramite DOM
« Risposta #6 il: 29 Settembre 2010, 16:09:29 CEST »
+1
se proprio vuoi passare un Uri, prova con questo:

Codice (Java): [Seleziona]
Uri uri = Uri.parse("android.resource://com.example.myapp/" + R.raw.my_resource);


per il resto, ti invito a rileggere quanto detto in questa discussione

Offline arma_81_

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
Re:[facile] Parsing XML tramite DOM
« Risposta #7 il: 29 Settembre 2010, 16:17:08 CEST »
0
sotto res/raw devo mettere il file miofile.xml ?
ma un file che ho in questa cartella lo posso richiamare anche attraverso una URL?
grazie della dritta  ;-)

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Richiesta aiuto Parsing XML tramite DOM
« Risposta #8 il: 23 Ottobre 2010, 13:51:46 CEST »
0
Ciao io dovrei fare il parsing di un file xml contenente dati con questo formato xml

Codice (XML): [Seleziona]
  <?xml version="1.0" encoding="UTF-8" ?>
- <java>
- <object name="agenda.bean.LogSpesaBean">
- <Qta>
  <int>7</int>
  </Qta>
- <IDGruppo>
  <int>0</int>
  </IDGruppo>
- <IDArticolo>
  <int>0</int>
  </IDArticolo>
- <Nome>
  <String>Sale</String>
  </Nome>
- <ID>
  <int>0</int>
  </ID>
- <Data>
  <long>0</long>
  </Data>
  </object>
- <object name="agenda.bean.LogSpesaBean">
- <Qta>
  <int>44</int>
  </Qta>
- <IDGruppo>
  <int>0</int>
  </IDGruppo>
- <IDArticolo>
  <int>1</int>
  </IDArticolo>
- <Nome>
  <String>Pepe</String>
  </Nome>
- <ID>
  <int>0</int>
  </ID>
- <Data>
  <long>0</long>
  </Data>
  </object>
</java>

Di questo voglio tirare fuori solo IDArticolo, Nome e Qta.
Ho provato a fare nel seguente modo:

Codice (Java): [Seleziona]
public class MyParser {
        static void vDebug(String debugString){         //metodi di convenienza
                Log.v("DomParsing", debugString+"\n");
        }
        static void eDebug(String debugString){
                Log.e("DomParsing", debugString+"\n");
        }
       
        ArrayList<MyArt> parsedData=new ArrayList<MyArt>();
        public ArrayList<MyArt> getParsedData() {
                return parsedData;
        }

    public void parseXml(String xmlUrl){
               
                Document doc;
                try {
                                               
                        doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new URL(xmlUrl).openStream());
                        //Costruiamo il nostro documento a partire dallo stream dati fornito dall'URL
                       
                        Element root=doc.getDocumentElement();
                        //Elemento(nodo) radice del documento
                       
                        vDebug("Root element :" + root.getNodeName());
                        vDebug("");
                       
                        //NodeList notes=root.getElementsByTagName("object"); //potremmo direttamente prendere gli elementi object
                       
                        NodeList notes=root.getChildNodes();
                       
                        //ma prediamo tutti i "figli" diretti di root utile se non avessimo solo "note" come figli di root
                       
                        for(int i=0;i<notes.getLength();i++){//per ogni
                               
                                Node c= notes.item(i);//nodo
                               
                               
                               
                               
                                if(c.getNodeType()==Node.ELEMENT_NODE){//controlliamo se questo è un nodo elemento (un tag)
                                        //se avessimo usato root.getElementsByTagName("note") questo controllo
                                        //non sarebbe stato necessario
                                       
                                        MyArt newArt=new MyArt(); //costruiamo un oggetto MyNote dove andremo a salvare i dati
                                       
                                        Element article=(Element)c; //cast da nodo a Elemento
                                       
                                        //if(article.getNodeName().equals("object"))  //in quanto abbiamo più elementi child - - -
                                        //{
                                       
                                                if(article.getNodeName().equals("Qta"))
                                                {
                                                        String nodeName=article.getNodeName(); //leggo il nome del tag
                                                        String nodeValue=article.getFirstChild().getNodeValue();//leggo il testo in esso contenuto
                                                        vDebug("______Dettaglio:"+nodeName);
                                                        vDebug("______Contenuto Dettaglio:"+nodeValue);
                                                        vDebug("");
                                                       
                                                        //a dipendenza del nome del nodo (del dettaglio) settiamo il relativo valore nell'oggetto
                                                        if(nodeName.equals("int"))
                                                                newArt.setQuta(nodeValue);
                                                }
                                                       
                                                       
                                                if(article.getNodeName().equals("IDArticolo"))
                                                {
                                                        String nodeName=article.getNodeName(); //leggo il nome del tag
                                                        String nodeValue=article.getFirstChild().getNodeValue();//leggo il testo in esso contenuto
                                                        vDebug("______Dettaglio:"+nodeName);
                                                        vDebug("______Contenuto Dettaglio:"+nodeValue);
                                                        vDebug("");
                                                       
                                                        //a dipendenza del nome del nodo (del dettaglio) settiamo il relativo valore nell'oggetto
                                                        if(nodeName.equals("int"))
                                                                newArt.setId(nodeValue);
                                                }
                                               
                                                if(article.getNodeName().equals("Nome"))
                                                {
                                                        String nodeName=article.getNodeName(); //leggo il nome del tag
                                                        String nodeValue=article.getFirstChild().getNodeValue();//leggo il testo in esso contenuto
                                                        vDebug("______Dettaglio:"+nodeName);
                                                        vDebug("______Contenuto Dettaglio:"+nodeValue);
                                                        vDebug("");
                                                       
                                                        //a dipendenza del nome del nodo (del dettaglio) settiamo il relativo valore nell'oggetto
                                                        if(nodeName.equals("String"))
                                                                newArt.setArti(nodeValue);
                                                }
                       
                                        NodeList noteDetails=c.getChildNodes();  //per ogni nota abbiamo i vari dettagli
                                        for(int j=0;j<noteDetails.getLength();j++){
                                                Node c1=noteDetails.item(j);
                                               
                                                        if(c1.getNodeType()==Node.ELEMENT_NODE){ //anche in questo caso controlliamo se si tratta di tag
                                                                Element detail=(Element)c1; //cast
                                                                String nodeName=detail.getNodeName(); //leggo il nome del tag
                                                                String nodeValue=detail.getFirstChild().getNodeValue();//leggo il testo in esso contenuto
                                                                vDebug("______Dettaglio:"+nodeName);
                                                                vDebug("______Contenuto Dettaglio:"+nodeValue);
                                                                vDebug("");
                                                               
                                                               
                                                        }
                                               
                                        }
                                        vDebug("");
                               
                                        parsedData.add(newArt); //aggiungiamo il nostro oggetto all'arraylist
                                }
                                                                                               
                        }                      
                //gestione eccezioni
                } catch (SAXException e) {
                        eDebug(e.toString());
                } catch (IOException e) {
                        eDebug(e.toString());
                } catch (ParserConfigurationException e) {
                        eDebug(e.toString());
                } catch (FactoryConfigurationError e) {
                        eDebug(e.toString());
                }
               
        }
   
}

Ma come risultato ottengo tutti null nella texview nei campi che vorrei vedere

Non riesco a capire dove sbaglio e come posso fare per leggere i sottonodi di ciascun object.

Vi ringrazio di nuovo.
Ciao!!

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:[facile] Parsing XML tramite DOM
« Risposta #9 il: 23 Ottobre 2010, 13:55:34 CEST »
0
Ho del codice Java che fa in automatico la creazione della classe in base al tipo nell'xml. Se lo trovo e funziona lo posto pure qui.
C'è anche il procedimento Marshall-Unmarshall ma usa librerie particolari,non credo vada bene per un progettino Android.
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:[facile] Parsing XML tramite DOM
« Risposta #10 il: 23 Ottobre 2010, 14:02:32 CEST »
0
Ti ringrazio. Posto meglio la sintassi del mio file XML:

Codice (XML): [Seleziona]
  <?xml version="1.0" encoding="UTF-8" ?>
- <java>
      - <object name="agenda.bean.LogSpesaBean">
           - <Qta>
                  <int>7</int>
             </Qta>
           - <IDGruppo>
                  <int>0</int>
              </IDGruppo>
           - <IDArticolo>
                  <int>0</int>
             </IDArticolo>
           - <Nome>
                 <String>Sale</String>
             </Nome>
           - <ID>
                  <int>0</int>
             </ID>
           - <Data>
                  <long>0</long>
             </Data>
      </object>
    - <object name="agenda.bean.LogSpesaBean">
          - <Qta>
                <int>44</int>
            </Qta>
          - <IDGruppo>
               <int>0</int>
             </IDGruppo>
          - <IDArticolo>
               <int>1</int>
            </IDArticolo>
          - <Nome>
              <String>Pepe</String>
            </Nome>
          - <ID>
              <int>0</int>
            </ID>
          - <Data>
              <long>0</long>
            </Data>
    </object>
</java>

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:[facile] Parsing XML tramite DOM
« Risposta #11 il: 23 Ottobre 2010, 15:03:01 CEST »
0
Nicola riesci a dirmi se funziona il codice java che avevi??
Ti ringrazio! grazie 1000!
ciao!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:[facile] Parsing XML tramite DOM
« Risposta #12 il: 23 Ottobre 2010, 15:14:35 CEST »
0
Beh a scrivere un parser che da quel xml popola un oggetto ci vuole davvero poco. Inoltre l'xml che hai postato ha un overhaed pazzesco, usa un sacco di caratteri di controllo che non servono a niente. In ambito mobile non ottimizza per niente la trasmissione dei dati. 
Io se fossi in voi valuterei di scrivere tutto a manina... le performances ringrazieranno :)
« Ultima modifica: 23 Ottobre 2010, 15:16:11 CEST da Ricky` »

Offline TripleM

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Ancora nessuno tra non molto si spera Galaxy S
  • Sistema operativo:
    Ubuntu 10.10
Re:[facile] Parsing XML tramite DOM
« Risposta #13 il: 03 Dicembre 2010, 17:12:05 CET »
0
Ciao, e' il primo messaggio che mando su questo forum, per cui ci tengo intanto a ringraziarvi per la grossa mano che mi state dando ;-)

Ho provato ad adattare il codice, ma ho dei problemi.
In pratica la mia necessita' e' far collegare tramite un nome utente ed una password la mia applicazione ad un mio server, quest'ultimo dopo aver controllato user e pass mi restituisce un xml con un elenco di messaggi.
Pero' cosi' non fa, mi restituisce questo errore:
Codice: [Seleziona]
12-03 17:02:28.300: VERBOSE/IO(798): java.io.FileNotFoundException: http://www.XXXXX.XXX/XML/login.php?action=login&home=1&xml=1&leonardo=1&f_user=utente&f_pass=password
La classe che fa il parsing dell'xml la chiamo in questo modo:
Codice (Java): [Seleziona]
package it.prod.mio;


import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class ElencoEmail extends ListActivity{

    public static final String TAG = "ElencoEmail";
    /**
     * Called when the activity is first created. Responsible for initializing the UI.
     */

    @Override
    public void onCreate(Bundle savedInstanceState){
        Log.v(TAG, "Activity State: onCreate()");
        super.onCreate(savedInstanceState);
       
        //Recupero dei valori
        Intent intent=getIntent(); // l'intent di questa activity
        String pkg=getPackageName();

        String user=intent.getStringExtra(pkg+".myUsername");  //prendiamo i dati
        String pass=intent.getStringExtra(pkg+".myPassword");
       
       
        String xmlUrl="http://www.XXXXX.XXX/XML/login.php?action=login&home=1&xml=1&leonardo=1&f_user=" + user + "&f_pass=" + pass;
        ParserElenco parser=new ParserElenco(); //otteniamo un istanza del nostro parser
        parser.parseXml(xmlUrl);//usiamo il parser
        ((TextView)findViewById(R.id.result)).setText(parser.getParsedData().toString());
       
    }
}
Username e password arrivano da un'altra activity. Il link e' corretto, infatti se lo copio e lo incollo sul browser del pc mi da il risultato corretto.

Grazie mille
MMM

Offline TripleM

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Ancora nessuno tra non molto si spera Galaxy S
  • Sistema operativo:
    Ubuntu 10.10
Re:[facile] Parsing XML tramite DOM
« Risposta #14 il: 03 Dicembre 2010, 17:35:38 CET »
0
Ok, chiedo scusa, era effettivamente un problema lato server, un htaccess (di cui mi ero scordato perche' i dati erano in memoria al browser) mi chiedeva user e pass... ora mi da altri errori, ma prima di disturbarvi ci sbatto il naso :)
MMM