Autore Topic: Parsare una variabile stringa  (Letto 1252 volte)

Offline menion83

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone - Samsung Galaxy Tab - Samsung Galaxy S - LG Optimus One - HTC Dream
  • Sistema operativo:
    Windows 7 Ultimate 32/64 - Ubuntu 10.10
Parsare una variabile stringa
« il: 19 Aprile 2011, 15:11:37 CEST »
0
Ciao Ragazzi,
sto creando un webservice per un'applicazione che fa una chiamata soap e restituisce una stringa con all'interno l'xml.
Ora, il tutto funziona bene però sono arrivato al punto che devo "pulire" la stringa.

La chiamata soap ha esito positivo e mi restituisce una variabile (resultData) che contiene questo:
Codice (XML): [Seleziona]
<?xml version="1.0"?><persona><nome>xxxxxxxx</nome><cognome>yyyyyyyyyyyy</cognome><citta>zzzzzzzzzz</citta></persona>
Codice (Java): [Seleziona]
tv.setText(resultData); Con questo lo visualizzo sulla mia applicazione ma viene visualizzata esattamente come arriva.
Come faccio per pulire la stringa e mettere in ordine quello che mi arriva?
Grazie!


Offline mk178

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +3
    • mikinacucchi
    • Mostra profilo
    • miki
  • Dispositivo Android:
    LG Optimus One
Re:Parsare una variabile stringa
« Risposta #1 il: 19 Aprile 2011, 16:00:15 CEST »
0
devi parserizzare l'XML.

deve esserci qualcosa tipo "getElementsByTagName" al quale passi il nome dell'elemento XML e ti restituisce la stringa

xmlobj.getElementsByTagName("name") corrisponderebbe a "xxxxxxxx"

non so per android come si chiamano esattamente le classi da utilizzare ma la logica è questa
Proposta seminario su Android a Bari:
[Evento] Seminario Android a Bari

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:Parsare una variabile stringa
« Risposta #2 il: 19 Aprile 2011, 16:25:23 CEST »
+1
[facile] Parsing XML tramite DOM - Android Developers Italia (guarda anche i commenti nel codice)
Ovviamente dal tutorial prendi solo cio che ti serve.

Offline mk178

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +3
    • mikinacucchi
    • Mostra profilo
    • miki
  • Dispositivo Android:
    LG Optimus One
Re:Parsare una variabile stringa
« Risposta #3 il: 19 Aprile 2011, 16:32:57 CEST »
0
[facile] Parsing XML tramite DOM - Android Developers Italia (guarda anche i commenti nel codice)
Ovviamente dal tutorial prendi solo cio che ti serve.

Perfetto!
in java non ho mai utilizzato il DOM (solo in PHP) ma è praticamente identico
Proposta seminario su Android a Bari:
[Evento] Seminario Android a Bari

Offline mk178

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +3
    • mikinacucchi
    • Mostra profilo
    • miki
  • Dispositivo Android:
    LG Optimus One
Re:Parsare una variabile stringa
« Risposta #4 il: 19 Aprile 2011, 17:19:42 CEST »
+1
Siccome potrebbe servirmi in futuro, sto vedendo un pò cosa offre Java(di conseguenza Android) per la gestione di sorgenti XML.
Nel tuo caso dovresti fare qualcosa del genere(nello specifico, senza implementare tutto quanto spiegato nel tutorial):
Codice (Java): [Seleziona]
String xmlraw = "<?xml version=\"1.0\"?><persona><nome>xxxxxxxx</nome><cognome>yyyyyyyyyyyy</cognome><citta>zzzzzzzzzz</citta></persona>";
               
               
                                try {                  
                                        Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xmlraw)));                     
                                       
                                        //elemento radice
                                        Element root=doc.getDocumentElement(); 
                                        //lista elementi <nome>
                                        NodeList node = root.getElementsByTagName("nome");
                       
                                        /*valore del primo figlio del primo elemento nome
                                         * (primo figlio è il nodo testo dato che l'elemento <nome> non ha elementi figli)
                                         * */

                                        String str = node.item(0).getFirstChild().getNodeValue();      
                                       
                                        Log.v("XML_P", str);           
               
                                } catch (Exception e) {                
                                        // TODO Auto-generated catch block                     
                                        e.printStackTrace();           
                                }

risultato:
Codice: [Seleziona]
04-19 17:17:49.973: VERBOSE/XML_P(5129): xxxxxxxx

ovviamente nel tuo caso non avrai una stringa dichiarata nel codice, quindi varierà l'inizializzazione di doc...

Il codice è un pò "brutale" ma era semplicemente un modo per provarlo
« Ultima modifica: 19 Aprile 2011, 17:21:19 CEST da mk178 »
Proposta seminario su Android a Bari:
[Evento] Seminario Android a Bari

Offline menion83

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone - Samsung Galaxy Tab - Samsung Galaxy S - LG Optimus One - HTC Dream
  • Sistema operativo:
    Windows 7 Ultimate 32/64 - Ubuntu 10.10
Re:Parsare una variabile stringa
« Risposta #5 il: 20 Aprile 2011, 16:09:55 CEST »
0
Ciao Ragazzi,
grazie alle vostre risposte sono riuscito a venire a monte del problema.

Offline mk178

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +3
    • mikinacucchi
    • Mostra profilo
    • miki
  • Dispositivo Android:
    LG Optimus One
Re:Parsare una variabile stringa
« Risposta #6 il: 20 Aprile 2011, 16:15:48 CEST »
0
Ciao Ragazzi,
grazie alle vostre risposte sono riuscito a venire a monte del problema.
alla fine come hai fatto? come ho fatto io, oppure hai optato per qualcosa di più "elegante"?
Proposta seminario su Android a Bari:
[Evento] Seminario Android a Bari

Offline menion83

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone - Samsung Galaxy Tab - Samsung Galaxy S - LG Optimus One - HTC Dream
  • Sistema operativo:
    Windows 7 Ultimate 32/64 - Ubuntu 10.10
Re:Parsare una variabile stringa
« Risposta #7 il: 29 Aprile 2011, 00:20:22 CEST »
0
 
alla fine come hai fatto? come ho fatto io, oppure hai optato per qualcosa di più "elegante"?

Ciao scusa per il ritardo ma alla fine ho risolto come mi hai indicato! ho dovuto modificare un po' l'xml stringa che mi arrivava perchè con il tuo metodo:
Codice (Java): [Seleziona]
String xmlraw = "<?xml version=\"1.0\"?><persona><nome>xxxxxxxx</nome><cognome>yyyyyyyyyyyy</cognome><citta>zzzzzzzzzz</citta></persona>";
               
               
                                try {                  
                                        Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xmlraw)));                      
                                       
                                        //elemento radice
                                        Element root=doc.getDocumentElement();  
                                        //lista elementi <nome>
                                        NodeList node = root.getElementsByTagName("nome");
                       
                                        /*valore del primo figlio del primo elemento nome
                                         * (primo figlio è il nodo testo dato che l'elemento <nome> non ha elementi figli)
                                         * */

                                        String str = node.item(0).getFirstChild().getNodeValue();      
                                       
                                        Log.v("XML_P", str);            
               
                                } catch (Exception e) {                
                                        // TODO Auto-generated catch block                      
                                        e.printStackTrace();            
                                }

Non sono riuscito a prendere i valori del tipo <nodo chiave="xxx" /> e ho dovuto fare l'xml in modo tale che uscisse fuori qualcosa come <nodo><chiave>xxx</chiave></nodo>.

Non è il massimo della vita però funziona.

Purtroppo viene fuori un super xml per via di questo inconveniente però funziona.

Se mi indicassi anche la strada per ovviare a questo sarebbe il massimo!
Vi ringrazio per l'aiuto e per la pazienza!
CIAO!

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:Parsare una variabile stringa
« Risposta #8 il: 29 Aprile 2011, 08:52:44 CEST »
0

Offline mk178

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +3
    • mikinacucchi
    • Mostra profilo
    • miki
  • Dispositivo Android:
    LG Optimus One
Re:Parsare una variabile stringa
« Risposta #9 il: 29 Aprile 2011, 15:32:06 CEST »
0
Io mi sono attenuto al codice XML che hai postato nel primo post...

Cmq, in  tal caso è come giustamente indica Qlimax
developer.android.com/reference/org/w3c/dom/Element.html#getAttribute(java.lang.String)

Nel tutorial viene pure usato...

Ora non ho tempo per provarlo ma dovrebbe essere qualcosa tipo quanto segue:

Sostiturie al mio codice le seguenti istruzioni:
Codice (Java): [Seleziona]
                                        NodeList node = root.getElementsByTagName("nome");
                       
                                        /*valore del primo figlio del primo elemento nome
                                         * (primo figlio è il nodo testo dato che l'elemento <nome> non ha elementi figli)
                                         * */

                                        String str = node.item(0).getFirstChild().getNodeValue();    
con
Codice (Java): [Seleziona]
                                        NodeList node = root.getElementsByTagName("nodo");
                     
                                        String str = node.getAttribute("chiave");    

così dovrebbe funzionare per XML tipo quello postato da te nell'ultimo post

<nodo chiave="xxx" />
Proposta seminario su Android a Bari:
[Evento] Seminario Android a Bari