Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Deserializzazione file xml

    Ciao a tutti. Sto scrivendo un programma che calcoli il codice fiscale, e come tutti sapere uno dei parametri necessari per fare ciò e il comune di nascita della persona interessata.

    Dato che ad ogni comune viene associato un codice e dato che i comuni Italiani sono migliaia, ho cercato e trovato un file xml su cui appoggiarmi.
    Dunque devo solo deserializzare questo file in una classe.
    Prima di fare ciò ho aperto il file per vedere la struttura dei dati, che riporto sotto, riducendo per motivi di spazio, il numero di comuni in 2.

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="Cities.xsd" generated="2010-04-22T13:59:14">
    <Cities>
    	<ID>1</ID>
    	<RegionID>1</RegionID>
    	<DisctrictID>1</DisctrictID>
    	<Name>Agliè</Name>
    	<IstatCode>1001</IstatCode>
    	<ChiefTown>0</ChiefTown>
    	<Altitude>315</Altitude>
    	<Area>13.28</Area>
    	<Population>2609</Population>
    	</Cities>
    <Cities>
            <ID>2</ID>
            <RegionID>1</RegionID>
            <DisctrictID>1</DisctrictID>
            <Name>Airasca</Name>
            <IstatCode>1002</IstatCode>
            <ChiefTown>0</ChiefTown> 
            <Altitude>257</Altitude>
            <Area>15.7</Area>
            <Population>3807</Population>
    </Cities>
    </dataroot>
    In pratica ho n oggetti di tipo Cities all'interno dello stesso file, senza che questi siano parte di un array di tipo Cities[].
    Non capisco come deserializzare tutti questi oggetti Cities dal medesimo file xml, mi serve il vostro aiuto
    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Deserializzazione file xml

    Originariamente inviato da microprocessore
    Non capisco come deserializzare tutti questi oggetti Cities dal medesimo file xml, mi serve il vostro aiuto
    In Java il parsing di documenti XML si può fare con diverse tecniche: DOM, SAX e (il più recente) StAX.
    Inoltre è possibile usare tecniche di "data binding" tra XML e classi Java. Esiste lo standard JAXB oppure esistono altre librerie specifiche (es. Castor).

    Cosa/quanto sai di queste tecnologie che ho menzionato? Se non ne conosci nessuna di queste, quanto sei disposti a "studiare" su queste cose? Quale versione di Java stai usando?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Deserializzazione file xml

    Originariamente inviato da andbin
    In Java il parsing di documenti XML si può fare con diverse tecniche: DOM, SAX e (il più recente) StAX.
    Inoltre è possibile usare tecniche di "data binding" tra XML e classi Java. Esiste lo standard JAXB oppure esistono altre librerie specifiche (es. Castor).

    Cosa/quanto sai di queste tecnologie che ho menzionato? Se non ne conosci nessuna di queste, quanto sei disposti a "studiare" su queste cose? Quale versione di Java stai usando?
    Premetto che è da poco che sto studiando java. Conosco bene C# e in quell'ambiente ho spesso avuto a che fare con la serializzazione XML.
    In Java sono un principiante, per il momento ha visto giusto java.beans, ma studiare altre tecniche non è un problema per me.

    Il problema è il fatto che nel file XML sono mappati due oggetti, che non risultano essere parte ne di un array di tipo Cities[] ne attributi di un'altra classe, e non so come muovermi.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Deserializzazione file xml

    Originariamente inviato da microprocessore
    Il problema è il fatto che nel file XML sono mappati due oggetti, che non risultano essere parte ne di un array di tipo Cities[] ne attributi di un'altra classe, e non so come muovermi.
    In questo momento non ho tempo di entrare più in dettaglio. Comunque se non hai (o non puoi/non vuoi) avere classi che "mappano" esattamente 1:1 (o quasi) quella struttura dati nel XML allora non puoi usare il data binding e .... ti tocca il parsing programmatico, nel senso che con DOM/SAX/StAX devi elaborare tu i vari tag, interpretarli, estrarre le parti di testo tra i tag, ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ma io non ho problemi nel creare una classe identica a quella illustrata nel file xml, quello che non riesco a fare e inizializzare i due oggetti.
    Se fosse solo un oggetto il problema non ci sarebbe.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da microprocessore
    Ma io non ho problemi nel creare una classe identica a quella illustrata nel file xml, quello che non riesco a fare e inizializzare i due oggetti.
    Se fosse solo un oggetto il problema non ci sarebbe.
    Se è così allora .... ecco un semplice/veloce esempio che utilizza JAXB 2 (nota: JAXB 2 è disponibile di serie nel framework da Java 6).

    File cities.xml (nota: per brevità ci sono solo 2 proprietà della città):
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="Cities.xsd"
              generated="2010-04-22T13:59:14">
        <Cities>
            <ID>1</ID>
            <Name>Agliè</Name>
        </Cities>
        <Cities>
            <ID>2</ID>
            <Name>Airasca</Name>
        </Cities>
    </dataroot>
    File Cities.java
    codice:
    import java.util.List;
    import javax.xml.bind.annotation.*;
    
    @XmlRootElement(name="dataroot")
    public class Cities {
        private List<City> cityList;
    
        @XmlElement(name="Cities")
        public List<City> getCityList() {
            return cityList;
        }
    
        public void setCityList(List<City> cityList) {
            this.cityList = cityList;
        }
    }
    File City.java
    codice:
    import javax.xml.bind.annotation.*;
    
    public class City {
        private long id;
        private String name;
    
        @XmlElement(name="ID")
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        @XmlElement(name="Name")
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String toString() {
            return "City[id=" + getId() + ", name=" + getName() + "]";
        }
    }
    File ProvaCities.java
    codice:
    import java.io.File;
    import java.util.List;
    import javax.xml.bind.*;
    
    public class ProvaCities {
        public static void main(String[] args) {
            try {
                JAXBContext jc = JAXBContext.newInstance(Cities.class);
                Unmarshaller unmarshaller = jc.createUnmarshaller();
    
                Cities cities = (Cities) unmarshaller.unmarshal(new File("cities.xml"));
    
                List<City> cityList = cities.getCityList();
    
                for (City city : cityList) {
                    System.out.println(city);
                }
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }
    L'output:
    City[id=1, name=AgliÞ]
    City[id=2, name=Airasca]


    Nota 1: lascio a te il compito di completare/migliorare come credi.
    Nota 2: nell'output la 'è' di Agliè è sballata, non è un problema del programma ma della visualizzazione in console. Se apri un JOptionPane con il testo, è corretto!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Perfetto. Ti ringrazio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.