Autore Topic: Problema Entità - Parser XML DOM  (Letto 1701 volte)

Offline TheWorstEver_

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia 10 Mini
  • Sistema operativo:
    Windows 7
Problema Entità - Parser XML DOM
« il: 01 Aprile 2011, 09:34:13 CEST »
0
Ciao regaz,
scrivo su questo forum perchè ho un problema riguardo alle entità dei file xml, html ecc.
Ho cercato un po' su internet, ho chiesto un po' in giro (professori, amici, ecc) ma le risposte sono state, che sanno come si fa ma su altri linguaggi di programmazione, per esempio usando il php e, non so quali librerie. Il mio professore mi ha reso consapevole della funzione escape / unescape, che formatta le entità in caratteri invece che nel loro codice iso-9x...
Su developer.android.com ho trovato un entityresolver ma non ho idea di come funzioni e di cosa faccia. Pensavo potesse essermi utile, qualcuno potrebbe spiegarmelo? Non ho trovato esempi di codice su internet, se non quelli proprio di developer.android.com che sono poco commentati e a me incomprensibili.

Voi avete già affrontato questo problema? Avete qualche altra idea per risolverlo?

Lascio sotto il codice che ho completato fino ad ora del progetto.

activity principale

Codice (Java): [Seleziona]
 
package mio.prove.prova06articolo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;

public class Principale extends Activity {
    /** Called when the activity is first created. */
        Intent intent;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ScrollView sv = new ScrollView(this);
        LinearLayout ll = new LinearLayout(this);
        sv.addView(ll);      
        TextView tv = new TextView(this);
        tv.setText("apri la notizia->");
        ll.addView(tv);
       
        intent= new Intent(this, Secondaria.class);

       
        Button bot = new Button(this);
        bot.setText("Apri la Notizia");
        ll.addView(bot);
        bot.setOnClickListener(new OnClickListener() {
           
            @Override
            public void onClick(View v) {
                    intent.putExtra("urlPrincipale", "http://www.corrierecomo.it/mobile_xml/xml/"); //ho smezzato il file in due pezzi, cosi da sapere anche la posizione della immagine, se sarà presente nel file xml
                    intent.putExtra("fileXml","128681.xml"); //nome.xml della pagina che deve aprire. -->poi verranno uniti per creare l'url principale all'xml della notizia.
                    startActivity(intent); //facciamo partire la seconda activity
                   /* Alcuni url possibili, caricati sul "mio sito web"
                    * http://maurovasile.altervista.org/2011/3/17/Home/1.xml    <-ok - con immagine
                    * http://maurovasile.altervista.org/126181.xml                              <-ok
                    * http://maurovasile.altervista.org/2011/3/17/Home/2.xml    <-ok
                    * http://maurovasile.altervista.org/2011/3/17/Home/3.xml    <-ok
                    * http://maurovasile.altervista.org/2011/3/17/Home/5.xml    <-ok
                    * http://maurovasile.altervista.org/2011/3/17/Home/5-1.xml    <- ok
                    *
                    * PAssiamo ora ad esaminare quelli che ci sono sul sito vero e proprio.
                    *
                    * http://www.corrierecomo.it/mobile_xml/xml/128669.xml  <-- ok
                    * http://www.corrierecomo.it/mobile_xml/xml/128670.xml  <-- ok
                    * 128671.xml                                                                                        <-- Formattato male, 1)al posto della firma c'è un'altra roba 2) una scritta è senza tag <text>, quindi non la scrive 3) due <occhielli> ?!
                    * 128674.xml                                                                                        <-- ok , manca didascalia sulla foto
                    * 128666.xml                                                                                        <-- ok
                    * 128667.xml                                                                                        <-- ok
                    * 128668.xml                                                                                        <-- Non c'è l'immagine sul server loro, Quindi muore
                    * 128675.xml                                                                                        <-- Formattato male,  L'occhiello ha il proprio tag <text> quindi il testo dell'articolo è translato giu di uno <-- Sfasa tutto, il testo è letto come l'occhiello
                    * 128676.xml                                                                                        <-- Formattato male, stessa cosa che sopra, solo che ora occhiello e titolo sono invertiti quindi il testo diventa il titolo.
                    * 128677.xml                                                                                        <-- Formattato male , uguale identico a sopra. Visualizzato il titolo.
                    * 128678.xml                                                                                        <-- ok , perfetto :D
                    * 128679.xml                                                                                        <-- ok , perfetto 2 :D
                    * 128680.xml                                                                                        <-- ok , perfetto 3 :D                                                                                 
                    * 128681.xml                                                                                        <-- MUORE MA PERCHè?  la scritta “sem a la früta…” mi uccide il programma. ->> NON CI CREDO QUESTO è UN'ALTRO CARATTERE BASTARDO " … " NON SONO 3 PUNTINI ATTACCATI
                    *
                    *
                    *
                    *
                    *
                    *
                    */

            }
    });
    setContentView(sv);
    }
}




activity secondaria

Codice (Java): [Seleziona]
package mio.prove.prova06articolo;

import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

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

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

public class Secondaria extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ScrollView sv = new ScrollView(this);              //mi creo il layout
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(1);  
        sv.addView(ll);  
       
        Intent intent = getIntent();                         //recupero di dati passati dall'altra intent
        String str=intent.getStringExtra("urlPrincipale")+intent.getStringExtra("fileXml");
       
 
       
        try {          
                        URL url = new URL(str);
                        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                        DocumentBuilder db = dbf.newDocumentBuilder();
                       
                        Document doc = db.parse(new InputSource(url.openStream()));
                       
                        Element elemento;
                        NodeList lista;
                       
                        elemento = (Element) doc.getElementsByTagName("occhiello").item(0);
                        if (elemento != null) //controllo che il nodo esiste ;)
                        {      
                        TextView occhiello = new TextView (this);
                        occhiello.setText( "occhiello:  "+controlloApici(elemento.getChildNodes()));           
                        ll.addView(occhiello);
                        }
               
                        elemento = (Element) doc.getElementsByTagName("titolo").item(0);
                        if (elemento != null)
                        {
                        //lista = elemento.getChildNodes();                                                     //unito al commento sotto      
                        TextView titolo = new TextView (this);
                        titolo.setTextSize(18);
                        //titolo.setText(((Node) lista.item(0)).getNodeValue());   //<--fondamentale, prima di usare la "controlloApici" si faceva cosi
                        titolo.setText("titolo:  "+controlloApici(elemento.getChildNodes()));
                        ll.addView(titolo);
                        }
                       
                        elemento = (Element) doc.getElementsByTagName("catenaccio").item(0);
                        if (elemento != null)
                        {
                        TextView catenaccio = new TextView (this);
                        catenaccio.setText("catenaccio:  "+controlloApici(elemento.getChildNodes()));          
                        ll.addView(catenaccio);
                        }

                       
                        elemento = (Element) doc.getElementsByTagName("pict").item(0); //immagini
                        if (elemento != null)
                        {
                                lista = elemento.getChildNodes(); //<-- scendo di un lvl
                                elemento =(Element) lista.item(0); //<-- il nodo pict  
                                ImageView iv = new ImageView(this);
                                ll.addView(iv);
                                String url1 = intent.getStringExtra("urlPrincipale")+ controlloApici(elemento.getChildNodes())+".jpg"; //mi creo l'url corretto
                                Bitmap bmp = BitmapFactory.decodeStream(new java.net.URL(url1).openStream()); //grazie ad un url.openstram mi scarica la immagine e la salvo nella bitmpap
                                iv.setImageBitmap(bmp); //imposto l'immagine nella imageview
       
                        }

                        elemento = (Element) doc.getElementsByTagName("text").item(1); //recupero il secondo testo dal file xml -> il testo, il primo testo riguarda il titolo, ma non ho bisogno di prendere tutto il text, perchè hanno già nomi specifici e posso fare la loro get
                        lista = elemento.getChildNodes(); //prendo tutti i suoi figli
                        String stringa="";

                        for (int i =0; i<lista.getLength();i++)
                        {
                                TextView testo = new TextView (this);                          
                                elemento =(Element) lista.item(i); //prendo uno ad uno i figli-nodi, li vedo come elementi per poter leggerne il contenuto. se mi salvo solo il nodo lo perdo-->risultato = null
                                stringa = controlloApici(elemento.getChildNodes());
                                //METODO INTERESSANTE MA NON FUNZIONANTE --> stringa = Html.fromHtml(elemento.getChildNodes().item(0).getNodeValue()).toString();
                                //stringa = ((Node) elemento.getChildNodes().item(0)).getNodeValue();//prendo il primo figlio del nodo (che anche qui è elemento, sempre la questione del contenuto), che si riferisce al contenuto fra i tag
                                testo.setText("pezzo:  "+stringa);
                                ll.addView(testo);                             
                        }                      
                       
                        elemento = (Element) doc.getElementsByTagName("firma").item(0);
                        if (elemento != null)
                        {
                        TextView firma = new TextView (this);
                        firma.setGravity(Gravity.CENTER_HORIZONTAL);
                        firma.setTextColor(Color.RED);
                        firma.setText(controlloApici(elemento.getChildNodes()));                       
                        ll.addView(firma);                     
                        }

                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();   
                        Toast tost = Toast.makeText(this, e.toString(), Toast.LENGTH_LONG*5); //riferisce l'errore
                        tost.show();
                }
       
         
       
        setContentView(sv);
    }
   
 public static String controlloApici(NodeList nl)   //restituisce la stringa di tutti i nodi "figli", senza contare gli attributi dei nodi (spesso = null)
 {
         Boolean iniziaConDopApice = false;
         String stringa="";
         for (int n =0; n < nl.getLength(); n++)
                {  
                        if (n==0)
                        {
                                if (((Node) nl.item(n)).getNodeValue() != null )
                                {
                                stringa =((Node) nl.item(n)).getNodeValue();  //controllo che l'apice non finisca all'inizio della frase
                            }
                                else
                                {
                                        iniziaConDopApice = true; //controllo se la stringa inizia con un doppio apice, non prendo in considerazione che inizi con un singolo apice poichè non sarebbe italiano corretto.
                                        n++;
                                        stringa = "&#38;#8220;"+ ((Node) nl.item(n)).getNodeValue() + "&#38;#8221;"; // non potendo inserire """ metto un valore per l'apice e poi faccio una semplice replace
                            stringa = stringa.replace("&#38;#8220;", "“");
                            stringa = stringa.replace("&#38;#8221;", "”");
                                }
                        }      
                        else
                        {              
                                if ( ! iniziaConDopApice)
                                {
                                n++; stringa = stringa+"'"+ ((Node) nl.item(n)).getNodeValue(); // controllo che salta gli attributi del nodo,e unisco la stringa con l'apice
                                }
                                else
                                {
                                        n++; stringa = stringa+ ((Node) nl.item(n)).getNodeValue();
                                        iniziaConDopApice = false;
                                }
                        }
                }
         return stringa;
}
}

il codice è un po' bordelloso, mi scuso per ciò.


Grazie in anticipo per ogni aiuto (:


Ps. credo che risolverà anche questo topic, Parsing RSS problema caratteri speciali - Android Developers Italia

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema Entità - Parser XML DOM
« Risposta #1 il: 01 Aprile 2011, 13:55:18 CEST »
0
posso avere intuito quale sia il tuo problema, ma ti dispiacerebbe esporlo entrando precisamente nel merito del problema?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline TheWorstEver_

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia 10 Mini
  • Sistema operativo:
    Windows 7
Re:Problema Entità - Parser XML DOM
« Risposta #2 il: 01 Aprile 2011, 15:41:03 CEST »
0
Io ci provo xD
Il problema è quando voglio leggere il contenuto di un nodo che contiene qualche entità, come per esempio
Codice (XML): [Seleziona]
<titolo>La pretura non blocca i “topi”, ma dà voce ai frontalieri</titolo>
Se io leggo il contenuto del nodo, cioè :

Codice (Java): [Seleziona]
        try {          
                        URL url = new URL(str);
                        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                        DocumentBuilder db = dbf.newDocumentBuilder();
                        Document doc = db.parse(new InputSource(url.openStream()));            
                        Element elemento;
                        NodeList lista;

                        elemento = (Element) doc.getElementsByTagName("titolo").item(0);
                        if (elemento != null)
                        {
                        lista = elemento.getChildNodes();
                        TextView titolo = new TextView (this);
                        titolo.setTextSize(18);
                        titolo.setText(((Node) lista.item(0)).getNodeValue());
                        ll.addView(titolo);

                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();  
                        Toast tost = Toast.makeText(this, e.toString(), Toast.LENGTH_LONG*5); //riferisce l'errore
                        tost.show();
                }

Con questo codice Qui il valore del nodo corrisponde a
Codice (Java): [Seleziona]
"La pretura non blocca i"
E tutto il resto dopo l'entità che fine ha fatto?
Ho provato a fare un ciclo for e effettivamente mi ha spaccato il contenuto del nodo in un modo a me sconosciuto del tipo :
Codice (Java): [Seleziona]
"La pretura non blocca i"+null+"topi"+null+", ma dà voce ai frontalieri"   // è logico che è un esempio e che questa cosa NON esiste, non si sa mai xDD (Riferito ai Niubbi come me)
Praticamente sono rimasti i nodi stringa e i caratteri particolari, le entità, sono rimaste a null.

Il mio problema è : come faccio a conoscere il valore dell'entità e aggiungerlo come carattere alla stringa?

All'inizio mi son detto << massi facciamo un ciclo for e al posto dei null ci butto dentro gli apici>> perchè pensavo che il problema fosse riferito solo a quello, però poi ho scoperto che sono molti di piu i caratteri che devo sostituire e necessito per forza di sapere che carattere sia quel  null che mi restituisce.

Grazie di esserti interessato (:
« Ultima modifica: 01 Aprile 2011, 15:45:09 CEST da TheWorstEver_ »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema Entità - Parser XML DOM
« Risposta #3 il: 04 Aprile 2011, 15:49:30 CEST »
0
Potrebbe essere legato al tipo di codifica della stringa?
Credo che in un altro topic se ne parlasse....se lo trovo ti linko.
Comunque, prova ad impostarne uno che supporti quei caratteri.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline TheWorstEver_

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia 10 Mini
  • Sistema operativo:
    Windows 7
Re:Problema Entità - Parser XML DOM
« Risposta #4 il: 04 Aprile 2011, 17:46:06 CEST »
0
Eee, come lo imposto?

Avevo già provato una cosa del genere

Codice (Java): [Seleziona]
                        URL url = new URL(str);
                        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                        DocumentBuilder db = dbf.newDocumentBuilder();
                       
                        InputSource is = new InputSource();
                        is.setByteStream(url.openStream());
                        is.setEncoding("iso-8859-1");

                        Document doc = db.parse(is);

(anche se non credo che è quello che intendi tu)
e non è cambiato assolutamente nulla.
Però non sono nemmeno sicuro che la "iso-8859-1" supporti quei caratteri, anche se la ho trovata in una tabella particolare. Puoi dirmi una codifica che supporta Sicuramente quelle entità?

Ps. ora provo a "normalizzare" il documento, magari si sistema tutto.

Grazie per essere l'unico a darmi ascolto xD


Ps. Appena posso piu tardi provo a fare una .normalize di tutto il documento, magari cambia qualcosa  (yn)
« Ultima modifica: 04 Aprile 2011, 17:48:40 CEST da TheWorstEver_ »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema Entità - Parser XML DOM
« Risposta #5 il: 04 Aprile 2011, 20:35:26 CEST »
0
3 cose:
1. prova ad utilizzare UNICODE come codifica...l'8859-1 ha "solo" 191 caratteri a supporto.
2. prova a pulire la stringa prima di parsarlam cioè sostituisci i caratteri "speciali" con altri.
3. se nessun'altro è intervenuto, probabilmente è perché non può dare informazioni aggiuntive che possano aiutare, mentre altri commenti potrebbero solo fare confusione.

fammi sapere.
 ;-)
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline TheWorstEver_

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia 10 Mini
  • Sistema operativo:
    Windows 7
Re:Problema Entità - Parser XML DOM
« Risposta #6 il: 04 Aprile 2011, 21:46:18 CEST »
0
Grazie mille del consiglio, io usavo la codifica che diceva il file xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="iso-8859-1"?>e qui ho risolto almeno il problema del crash della applicazione, ora al posto di morire esce "null" ed è un passo avanti.

In che senso pulisco la stringa "prima" di parsarla? non la ho nemmeno se non la salvo come doc o.O


Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema Entità - Parser XML DOM
« Risposta #7 il: 04 Aprile 2011, 22:45:17 CEST »
0
per pulire la stringa dovresti prenderla, prima.
Anziché dare in pasto al DOM parser la URL, prenditi il contenuto della URL, puliscilo (cioè fai un replace delle entity che non piacciono al parser) e la stringa risultante la dai in pasto al DOM parser (ha un costruttore con stringa).
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline TheWorstEver_

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia 10 Mini
  • Sistema operativo:
    Windows 7
Re:Problema Entità - Parser XML DOM
« Risposta #8 il: 05 Aprile 2011, 15:14:47 CEST »
0
mumble sto facendo cosi:

Codice (Java): [Seleziona]
                        URL url = new URL(str);
                        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                        DocumentBuilder db = dbf.newDocumentBuilder();
                       
        /*              InputSource is = new InputSource(); //vecchio metodo ? forse (yn)
        *           is.setByteStream(url.openStream());
        *               is.setEncoding("utf-8");
        */

                             
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"iso-8859-1"));
            String ln;
            StringBuffer buff = new StringBuffer();
            while ((ln = in.readLine()) != null)
            {
             buff.append(ln);
            }
           
            String ret = buff.toString();
       
            ret = ret.replace("&#38;#8217;", "'");
            ret = ret.replace("&#38;#8220;", "“");
            ret = ret.replace("&#38;#8221;", "”");
            ret = ret.replace("&#38;#8211;", "-");
            ret = ret.replace("&#38;#8230;", "…");  

            File f = File.createTempFile("pagina", "xml"); // mi salvo il file come temporaneo
            FileWriter fw = null;
            BufferedWriter bw = null;
            fw = new FileWriter(f, true);
            bw = new BufferedWriter(fw);
            bw.write(ret);
            bw.close();
            fw.close();
                       
           TextView prova = new TextView (this);
           prova.setText( "prova:  "+ret);             
           ll.addView(prova);

           Document doc = db.parse(ret);

e cosi riesco a leggere il file, "parsato" da file, facendo la replace delle entità odiose. Però il risultato non cambia, o meglio, se prima dava null ora da Ā oppure â[][] <- che sono quadrati vuoti..

Grazie dei consigli, ora hai altre idee? xD
[anche se missa che sbaglio a capire io, il modo in cui mi stai dicendo di fare il parsing asd]
« Ultima modifica: 05 Aprile 2011, 21:51:58 CEST da TheWorstEver_ »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema Entità - Parser XML DOM
« Risposta #9 il: 06 Aprile 2011, 16:20:41 CEST »
0
ok.
forse ho trovato qualcosa che ti può aiutare: leggiti questo link.

In pratica il problema risiede nel fatto che java lavora con unicode, mentre il tuo file è iso-8859-1. Quel link ti suggerisce come convertire i formati.

Prosit.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline TheWorstEver_

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia 10 Mini
  • Sistema operativo:
    Windows 7
Re:Problema Entità - Parser XML DOM
« Risposta #10 il: 06 Aprile 2011, 19:40:59 CEST »
0
Ciao 7h38ugg3r,
Grazie.

Allora ho provato ad usare quel convertitore, però  il risultato è che dalla stringa, prende tutti i caratteri che conosce e li converte, mentre gli altri null li mette in fondo alla stringa, scrivendo proprio "null".

Probabilmente sbaglio a convertirlo, perchè io lo converto, direttamente quando leggo il contenuto del nodo.


Offline TheWorstEver_

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia 10 Mini
  • Sistema operativo:
    Windows 7
Re:Problema Entità - Parser XML DOM
« Risposta #11 il: 08 Aprile 2011, 09:42:55 CEST »
0
Ehi thebugger,
ho trovato il problema, una cosa stupidissima.

I file xml che io ho, e che non posso modificare, sono formattati in iso-8859-1 ma contengono dei file codificati in utf-8.
Per convertire i file, semplicemente me li salvo come txt, sostituisco il formato della codifica xml, e sostituisco i caratteri dal formato "&#xxxx" nei caratteri giusti unicode.
Poi mi salvo il file txt, come xml in locale, come file temporaneo e lo passo al doc.parse.
Facendo cosi correggo il file xml che mi danno e lo apro correttamente.

Grazie dei consigli che mi hai dato, probabilmente non mi sarei mai accorto che erano in codifiche diverse.

Lascio qui sotto il codice, nel caso qualcuno abbia lo stesso problema.

Codice (Java): [Seleziona]
URL url = new URL(str);
                        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                        DocumentBuilder db = dbf.newDocumentBuilder();
                       
                        InputSource is = new InputSource(); //vecchio metodo ? forse (yn)
                    is.setByteStream(url.openStream());
       
                             
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"iso-8859-1"));
            String ln;
            StringBuffer buff = new StringBuffer();
            while ((ln = in.readLine()) != null)
            {
             buff.append(ln);
            }
           
            String ret = buff.toString();
       
            ret = ret.replace("&#38;#8217;", "'");
            ret = ret.replace("&#38;#8220;", "“");
            ret = ret.replace("&#38;#8221;", "”");
            ret = ret.replace("&#38;#8211;", "-");
            ret = ret.replace("&#38;#8230;", "…");    
            ret = ret.replace("iso-8859-1", "utf-8");
           
            File f = File.createTempFile("pagina", "xml");
            FileWriter fw = null;
            BufferedWriter bw = null;
            fw = new FileWriter(f, true);
            bw = new BufferedWriter(fw);
            bw.write(ret);
            bw.close();
            fw.close();
   
                        Document doc = db.parse(f);
                        doc.normalize();

Ps. sarebbe meglio modificare il titolo avvisando del problema giusto?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema Entità - Parser XML DOM
« Risposta #12 il: 11 Aprile 2011, 11:42:12 CEST »
0
Non credo ce ne sia bisogno.

Mi fa piacere che tu abbia risolto, comunque.
 :D
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline TheWorstEver_

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia 10 Mini
  • Sistema operativo:
    Windows 7
Re:Problema Entità - Parser XML DOM
« Risposta #13 il: 11 Aprile 2011, 13:56:49 CEST »
0
Grazie mille per i consigli ;-)