2011-07-14 3 views
3

J'essaie de convertir un fichier XML en un objet Java, maintenant, j'ai lu JAXB, XStream, Sax et DOM, je voudrais convertir ce genre de type de xml:XML to Java Object

<testxml testtype="converting" duration="100.00" status="successful" /> 

il pourrait être aussi bien que:

<testxml testype="converting" duration="100.00"> successful </textxml> 

Je voulais savoir s'il y a quelque chose là-bas (et peut-être pas 3ème partie) que je peux utiliser, sans déclarer un modèle dans la DTD ou JAXB en XSD mais Java (donc je vais déclarer une classe java appelée testxml avec toutes les variables pertinentes ie ie type de test, durée, statut>

Merci à tous pour votre temps.

Répondre

11

La classe ci-dessous en utilisant les annotations JAXB va faire exactement ce dont vous avez besoin, pas besoin de créer un XSD ou un modèle en utilisant Java 1.6+:

@XmlRootElement 
public class TestXML { 
    private String testtype; 
    private double duration; 
    private String status; 

    public void setTesttype(String testtype) { 
    this.testtype = testtype; 
    } 
    @XmlAttribute 
    public String getTesttype() { 
    return testtype; 
    } 
    public void setDuration(double duration) { 
    this.duration = duration; 
    } 
    @XmlAttribute 
    public double getDuration() { 
    return duration; 
    } 
    public void setStatus(String status) { 
    this.status = status; 
    } 
    @XmlValue 
    public String getStatus() { 
    return status; 
    } 

    public static void main(String args[]) { 
    TestXML test = JAXB.unmarshal(new File("test.xml"), TestXML.class); 

    System.out.println("testtype = " + test.getTesttype()); 
    System.out.println("duration = " + test.getDuration()); 
    System.out.println("status = " + test.getStatus()); 
    } 
} 

En utilisant cela comme test.xml:

<testxml testtype="converting" duration="100.00"> successful </testxml> 
+0

WOW! merci! et je suppose que je vais devoir utiliser la méthode Unmarshall droite? merci encore! – 7dr3am7

+0

Oui, la méthode 'main()' utilise la méthode 'JAXB.unmarshal()'. – bamana

3

Vous pouvez le faire assez simplement en utilisant java.xml.bind.annotations sur une classe Java et JAXB.Unmarshal

JAXB fait partie du JRE en Java 1.6+

+0

Mais je vais toujours besoin de créer xsd ou un modèle droit? – 7dr3am7

+1

Nope-- Just Unmarshal une classe annotée avec un InputStream qui délivre le XML et vous obtiendrez un objet Java peuplé. Malheureusement, les docs le font paraître beaucoup plus complexe que ça. – antlersoft

+0

Merci! Toi et Babana m'ont donné une bonne réponse .. Je devrais vous donner à la fois la meilleure réponse! :(ne peut en choisir un bien :(merci beaucoup antlesoft! – 7dr3am7

1

Essayez XStream/XPP3. C'est bon. Prend quelques heures pour comprendre. Fait toute la magie pour toi.

+1

hmmm Je ne veux vraiment pas utiliser 3ème partie – 7dr3am7

0

Personnellement j'utilise XStream @http://x-stream.github.io/ Il est vraiment facile à utiliser et offre toujours assez de fonctionnalités au cas où vous en auriez besoin. Malheureusement, il semble que le projet ne soit plus maintenu activement, mais je n'ai pas encore trouvé d'alternative qui corresponde à mes besoins. Je dirais que ça vaut la peine de passer un peu de temps à le vérifier ;-)

edit: quand vous pouvez utiliser Java 6, je suis tout à fait d'accord sur le fait que les autres réponses sont préférables!