Autore Topic: XML Parser SAX: gestire campi vuoti  (Letto 272 volte)

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
XML Parser SAX: gestire campi vuoti
« il: 30 Luglio 2013, 15:39:25 CEST »
0
Hi there.
Per l'app che sto sviluppando devo recuperare informazioni che mi vengono fornite in XML da web service.
L'XML in questione è questo:
Codice (XML): [Seleziona]
<pagamento>
                        <ID>1</ID>
                        <status></status>
                        <nome>Bonifico anticipato</nome>
                </pagamento>

                <pagamento>
                        <ID>2</ID>
                        <status></status>
                        <nome>Contrassegno</nome>
                </pagamento>

                <pagamento>
                        <ID>3</ID>
                        <status></status>
                        <nome>PayPal</nome>
                </pagamento>

Come si può notare, il campo <status> è vuoto. Questo invece è l'Handler:
Codice (Java): [Seleziona]
public class PagamentiXMLHandler extends DefaultHandler{
       
        private boolean in_id = false;
        private boolean in_stato = false;
        private boolean in_nome = false;
       
private PagamentiClass xmlparsing = new PagamentiClass();
       
        // ===========================================================
    // Getter & Setter
    // ===========================================================
       
        public PagamentiClass getParsedData() {
        return this.xmlparsing;
   }

   // ===========================================================
   // Metodi
   // ===========================================================
       
        @Override
    public void startDocument() throws SAXException {
         this.xmlparsing = new PagamentiClass();
    }

    @Override
    public void endDocument() throws SAXException {
         /* Niente di utile da inserire */
    }
   
    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
        if(localName.equals("ID")){
                this.in_id=true;
        }else if(localName.equals("status")){
                this.in_stato=true;
        }else if(localName.equals("nome")){
                this.in_nome=true;
        }
    }
   
    public void endElement(String namespaceURI, String localName, String qName)throws SAXException {
        if(localName.equals("ID")){
                this.in_id=false;
        }else if(localName.equals("status")){
                this.in_stato=false;
        }else if(localName.equals("nome")){
                this.in_nome=false;
        }
    }
   
    @Override
    public void characters(char ch[], int start, int length) {
        if(this.in_id){
                xmlparsing.setID(new String(ch, start, length));
        }else if(this.in_stato){
                xmlparsing.setStates(new String(ch, start, length));
        }else if(this.in_nome){
                xmlparsing.setNames(new String(ch, start, length));
        }
    }

}

I metodi setID etcc richiamati in "characters", vanno a riempire diversi ArrayList<String>.
Per quanto riguarda ID e NOMI, tutto ok, ma per quanto concerne lo STATUS, l'ArrayList risulta vuoto.
La domanda è: come faccio a condizionare il riempimento di quest'ultimo Arraylist quando incontro un campo vuoto come in <status> nell'XML indicato qui sopra?
Grazie  ;-)

Post unito: 30 Luglio 2013, 16:26:48 CEST
Niente, risolto così:
Codice (Java): [Seleziona]
...
 public void endElement(String namespaceURI, String localName, String qName)throws SAXException {
        if(localName.equals("ID")){
                this.in_id=false;
        }else if(localName.equals("status")){
                this.in_stato=false;
                xmlparsing.setStates("enabled");
        }else if(localName.equals("nome")){
                this.in_nome=false;
        }
    }
...
« Ultima modifica: 30 Luglio 2013, 16:26:48 CEST da MikeKeepsOnShine, Reason: Merged DoublePost »
True perfection has to be imperfect