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.