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

    [Java] Trasformare un XML in un JavaBeans

    Ciao a tutti!
    Senza dilungarmi troppo vi espongo subito il mio problema, in pratica ho un xml, del quale ora vi copio il codice:

    <?xml version="1.0" encoding="UTF-8"?>
    <scrapersresult>
    <id>84829</id>
    <urn_acct>200374274</urn_acct>
    <original_legal_name>4D ENGINEERING SRL</original_legal_name>
    <original_street_address>Via Rufelli 22</original_street_address>
    <original_partita_iva>03869371009</original_partita_iva>
    <original_pr_zipcode>00040</original_pr_zipcode>
    <original_pr_state>RM</original_pr_state>
    <legal_name>4d Engineering</legal_name>
    <forma_giuridica></forma_giuridica>
    <street_address>ALBANO LAZIALE (RM) (00041) c. Matteotti 69</street_address>
    <street></street>
    <partita_iva></partita_iva>
    <company_city></company_city>
    <cam_reg></cam_reg>
    <company_country></company_country>
    <company_province></company_province>
    <company_postal_code></company_postal_code>
    <company_industry>SOCIET&#195;€ DI INGEGNERIA E CONSULENZA TECNICO ECONOMICA</company_industry>
    <main_phone_number>06 9322616</main_phone_number>
    <number_of_employes>51-150</number_of_employes>
    <turnover_amount>da 250.001,00 a 500.000,00</turnover_amount>
    <turnover_year></turnover_year>
    <fundation_year>1990</fundation_year>
    <email>info@4dengineering.com</email>
    <fax>06 9322615</fax>
    <web_site></web_site>
    <turnover_currency>EUR</turnover_currency>
    <owning_organization></owning_organization>
    <datasource>&quot;http://www.guidamonaci.it/ricerca/de...05525111&quot;</datasource>
    <first_name></first_name>
    <last_name></last_name>
    <job_title></job_title>
    <work_phone>+39 06 9322616</work_phone>
    <cell_phone></cell_phone>
    <profile_street_address></profile_street_address>
    <profile_city></profile_city>
    <profile_country></profile_country>
    <profile_postal_code></profile_postal_code>
    <profile_datasource></profile_datasource>
    <referent>referent@referent.it</referent>
    <number_of_employes_from>51</number_of_employes_from>
    <number_of_employes_to>150</number_of_employes_to>
    <turnover_amount_from>250001</turnover_amount_from>
    <turnover_amount_to>500000</turnover_amount_to>
    <region>Lazio</region>
    <file_uploaded_name>SAMPLE2.xlsx</file_uploaded_name>
    <turnover_type>RANGE</turnover_type>
    <descrizione></descrizione>
    <company_industry_ibm></company_industry_ibm>
    <note></note>
    <ro></ro>
    </scrapersresult>


    Ho fatto il mio bean con i vari getter and setter ma ora volevo trovare una libreria o qualcosa che mi permettesse di riempire i campi con i valori dell'xml senza stare a settarli io uno a uno a mano... Ho trovato questo codice che in teoria doveva eseguire il tutto

    public class XmlToBean {
    public static void main(String[] args) throws FileNotFoundException {
    try
    {
    XMLDecoder decoder = new XMLDecoder(new BufferedInputStream(new FileInputStream("scrapersresult.xml")));


    //
    // Reads the next object from the underlying input stream.
    //

    XmlForm bean = new XmlForm();
    bean = (XmlForm) decoder.readObject();
    decoder.close();
    }catch(FileNotFoundException e)
    {
    e.printStackTrace();
    }
    }
    }

    Ma invece ma da una serie di errori sull'apertura e la chiusura dei tag... Per ogni tag mi dice

    Unrecognized openening/closing tag: scraperesult ...
    Continuing...


    ETC ETC per tutti i campi...

    Non riesco a venirne a capo.. Qualche idea? Anche utilizzando altri metodi è

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

    Re: [Java] Trasformare un XML in un JavaBeans

    Originariamente inviato da sgamo1992
    Ho trovato questo codice che in teoria doveva eseguire il tutto

    Ma invece ma da una serie di errori sull'apertura e la chiusura dei tag... Per ogni tag mi dice

    Unrecognized openening/closing tag: scraperesult ...
    Continuing...
    XMLEncoder/XMLDecoder sono nel package java.beans e si possono usare per la persistenza su XML dei bean. Ma lo "schema" del XML è prefissato e non può essere "arbitrario". Basta che guardi il javadoc di XMLEncoder dove c'è un esempio di XML generato. Quel formato è standard per queste due classi e non lo puoi cambiare.
    Detto in altro modo: queste due classi si usano in coppia, con una scrivi il bean che puoi riottenere con l'altra, lo schema è noto a queste due classi e poco importa al programmatore che vuole usare queste due classi.

    Se hai un XML arbitrario e vuoi "mapparlo" su classi Java, servono altre API/librerie apposite, come ad esempio la API standard JAXB (Java Architecture for XML Binding).

    Il seguente è un esempio che usa JAXB 2.0 (tra l'altro fa già parte del framework di Java 6) sfruttando le "annotazioni".

    persona.xml
    codice:
    <?xml version="1.0" encoding="iso-8859-1"?>
    <persona>
        <nome>Mario</nome>
        <cognome>Rossi</cognome>
        <annoNascita>1965</annoNascita>
    </persona>
    Persona.java
    codice:
    import javax.xml.bind.annotation.*;
    
    @XmlRootElement
    public class Persona {
        private String nome;
        private String cognome;
        private int annoNascita;
    
        @XmlElement
        public void setNome(String nome) {
            this.nome = nome;
        }
    
        @XmlElement
        public void setCognome(String cognome) {
            this.cognome = cognome;
        }
    
        @XmlElement
        public void setAnnoNascita(int annoNascita) {
            this.annoNascita = annoNascita;
        }
    
        public String toString() {
            return nome + " " + cognome + ", " + annoNascita;
        }
    }
    PersonaDaXml.java
    codice:
    import java.io.*;
    import javax.xml.bind.*;
    
    public class PersonaDaXml {
        public static void main(String[] args) {
            try {
                JAXBContext jc = JAXBContext.newInstance(Persona.class);
                Unmarshaller um = jc.createUnmarshaller();
    
                Persona pers = (Persona) um.unmarshal(new File("persona.xml"));
    
                System.out.println("Dati persona: " + pers);
            } catch (Exception e) {
                System.err.println(e);
            }
        }
    }
    Spero che l'esempio possa essere utile a te o altri.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    guarda ti ringrazio!
    Però invece io ho risolto in un altro modo...
    Ho utilizzato la libreria Xbeans!!
    Che dopo un po' di problemi, son riuscito ad installare e a far funzionare...





    Ora ho altri tipi di problemi!

    Io spiego, sia mai che qlk mi risponda...

    Allora ora che ho popolato il mio beans... Nella variabile SCRAPE ci sono tutti i miei dati...
    Ora dovrei però trasformare il mio bean in una hashMap, esiste una libreria per fare tutto ciò... Ovvvero BeanUtils che con il metodo describe, passandogli il bean, lo trasforma in automatico...

    POSTO IL CODICE


    String xmlFile = System.getProperty ("user.home")+System.getProperty("file.separator") +"scrapersresult.xml";

    File xml = new File(xmlFile);
    // Bind the instance to the generated XMLBeans types.

    ScrapersresultDocument scrapeDoc = ScrapersresultDocument.Factory.parse(xml);//.parse(xmlFile);

    // Get and print pieces of the XML instance.
    Scrapersresult scrape = scrapeDoc.getScrapersresult();

    scrape.getId();


    Map<String, String> m =new HashMap<String, String>();


    m = BeanUtils.describe(scrape);

    ....

    Quando arriva a quel comando però mi da questo errore

    org.apache.xmlbeans.impl.values.XmlValueNotSupport edException: Could not get a Java Date type from a Schema complex type
    at org.apache.xmlbeans.impl.values.XmlObjectBase.getG DateValue(XmlObjectBase.java:1651)
    ... 12 more



    Idee?

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.