Autore Topic: parentesi quadre inspiegabili in domparsing  (Letto 744 volte)

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
parentesi quadre inspiegabili in domparsing
« il: 19 Febbraio 2011, 20:40:46 CET »
0
Salve ragazzi! in pratica non riesco a capire da dove derivino le parentesi quadre di apretura e chiusura come si può vedere nell'immagine. nel codice non mi pare ci sia qualcosa che le impongano. per questo ho pensato che magari sono imposte direttamente dal dom? .... o_O anche se ne dubito fortemente, perchè in tal caso doveva pur starci scritto da qualche parte, in rete! mi affido a voi... vi posto tutto...
main.java
Codice (Java): [Seleziona]
package com.xml.explore;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

public class main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
       String FILENAME = "/explore/template.xml";
        File SD_PATH = Environment.getExternalStorageDirectory();
        File mioFile = new File(SD_PATH, FILENAME);
   // File mioFile = new File(Environment.getExternalStorageDirectory()+"/explore/prova.xml");
 
        try{

          //  File frova = new File(Environment.getExternalStorageDirectory()+"/prova.txt");

            InputStream fileIS = new FileInputStream(mioFile);

            BufferedReader buf = new BufferedReader(new InputStreamReader(fileIS));

            String readString = new String();

            //just reading each line and pass it on the debugger

            while((readString = buf.readLine())!= null){
//visualizzanel logcat
               Log.d("line: ", readString);

            }

         } catch (FileNotFoundException e) {
            e.printStackTrace();
   
         } catch (IOException e){
            e.printStackTrace();
         }
       MyParserTemplate parser=new MyParserTemplate(); //otteniamo un istanza del nostro parser
        // prova parser=new prova();
         parser.parseXml(mioFile);
         //usiamo il parser
         ((TextView)findViewById(R.id.result)).setText(parser.getParsedData().toString());
    }
}

MyParserTemplate.java  template è il file xml e qui ne faccio il parser
Codice (Java): [Seleziona]
package com.xml.explore;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.util.Log;

public class MyParserTemplate {
        static void vDebug(String debugString){         //metodi di convenienza
                Log.v("DomParsing", debugString+"\n");
        }
        static void eDebug(String debugString){
                Log.e("DomParsing", debugString+"\n");
        }
       
        ArrayList<MyTemplate> parsedData=new ArrayList<MyTemplate>();
        public ArrayList<MyTemplate> getParsedData() {
                return parsedData;
        }

    public void parseXml(File mioFile){
               
                Document doc;
                try {
                                                //String url=mioFile.getPath();
                        doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(mioFile);
                        //Costruiamo il nostro documento a partire dallo stream dati fornito dall'URL
                        Element root=doc.getDocumentElement();//ovvero template
                        //Elemento(nodo) radice del documento
                        //io devo spostare la root su tappe
                       
                        vDebug("Root element :" + root.getNodeName());
                        vDebug("");
                       
                        NodeList notes=root.getElementsByTagName("idtappa"); //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
                                       
                                        MyTemplate newTemplate=new MyTemplate(); //costruiamo un oggetto MyNote dove andremo a salvare i dati
                                       
                                        Element note=(Element)c; //cast da nodo a Elemento
                                       
                        //if(note.getNodeName().equals("idtappa")){//  in quanto sappiamo di avere solo "note" come childs
                                       
                                        String tipo=note.getAttribute("tipo"); // lettura attributo
                                        vDebug("_Attributo note id:"+tipo);
                                        vDebug("");
                                       
                                        newTemplate.setTipo(tipo); // 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("id"))
                                                                        newTemplate.setIdTappa(nodeValue);
                                                               
                                                                if(nodeName.equals("descrizione"))
                                                                        newTemplate.setDescrizione(nodeValue);
                                                               
                                                                if(nodeName.equals("iddomanda"))
                                                                        newTemplate.setIdDomanda(nodeValue);
                                                               
                                                               
                                                               
                                                               
                                                        }
                                               
                                        }
                                        vDebug("");
                               
                                        parsedData.add(newTemplate); //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());
                }
               
        }
   
}

struttura del template
Codice (Java): [Seleziona]
public class MyTemplate {
        private String tipo;
        private String idtappa;
        private String descrizione;
        private String iddomanda;

       
        public String getIdTappa() {
                return idtappa;
        }

        public void setIdTappa(String idtappa) {
                this.idtappa = idtappa;
        }

        public String getTipo() {
                return tipo;
        }

        public void setTipo(String tipo) {
                this.tipo = tipo;
        }

        public String getDescrizione() {
                return descrizione;
        }

        public void setDescrizione(String descrizione) {
                this.descrizione = descrizione;
        }

        public String getIdDomanda() {
                return iddomanda;
        }

        public void setIdDomanda(String iddomanda) {
                this.iddomanda = iddomanda;
        }



        @Override
        public String toString() {
                return "tipo:" + tipo+ ", idtappa=" + idtappa+ ", iddomanda=" + iddomanda;
       
        }
}

vi posto anche l'xml del layout...anche se qui non c'è niente con [ o ]
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/hello"
   />
<TextView android:text="" android:id="@+id/result" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:parentesi quadre inspiegabili in domparsing
« Risposta #1 il: 20 Febbraio 2011, 13:55:52 CET »
0
Sei fai il .toString() di un ArrayList ti viene stampato in quel modo. Non è inspiegabile ;)

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:parentesi quadre inspiegabili in domparsing
« Risposta #2 il: 20 Febbraio 2011, 22:37:19 CET »
0
quindi accade in tutti i .toString() sugli arraylist? .. non me ne sono mai accorto..

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:parentesi quadre inspiegabili in domparsing
« Risposta #3 il: 21 Febbraio 2011, 10:01:10 CET »
+1
A menochè non lo sovrascrivi.