2011-07-24 4 views
2

J'ai XML comme suit:JAXB Unmarshalling objets polymorphes - collections?

<Temp NAME="bobo"> 
    <elem1 /> 
    <elem2> 
     <Attri1 ID="123" /> 
    </elem2> 
    <elem3> 
     <Attri2 MOM="9" ID="7" SSS="2" /> 
    </elem3> 
    <elem3> 
     <Attri3 MOM="44" ID="4" DSC="First Test"/> 
    </elem3> 
</Temp> 

J'utilise des annotations à la carte pour les classes java:

@XmlRootElement(name = "Temp") 
public class Temp { 

    @XmlElements({ 
     @XmlElement(name="elem1",type=elem.class), 
     @XmlElement(name="elem2",type=elem.class)}) 
    public ArrayList<elem> elms; 
} 

public class elem { 
... 
} 

public class elem1 extends elem{ 
... 
} 

public class elem2 extends elem{ 
... 
} 

public class elem3 extends elem{ 
... 
} 

Dans chaque élément il peut y avoir beaucoup d'attributs.

Quelqu'un peut m'aider s'il vous plaît comment annoter les classes Java correctement?

Permettez-moi d'aiguiser ma question. Je dois construire à partir de ce XML un objet java qui aura 3 paramètres: nom du premier élément (p1), nom de l'élément enfant (p2), valeurs de la carte (p3).

Le XML ci-dessus génère 4 objets java élém comme suit:

tous les objets java type est élém!

OBJ1:

p1 = elem1 
p2 = null 
p3 = null 

obj2:

p1 = elem2 
p2 = Attri1 
p3 = map: key value 
      (ID, 123) 

obj3:

p1 = elem3 
p2 = Attri2 
p3 = map: key value 
      (MOM, 9) 
      (ID, 7) 
      (SSS, 2) 

obj4:

p1 = elem3 
p2 = Attri3 
p3 = map: key value 
      (MOM, 44) 
      (ID, 4) 
      (DSC, First Test) 

Merci d'avance! Boris.

+0

OK, alors que se passe-t-il lorsque vous essayez ce que vous avez? – skaffman

+0

La chose est que je ne sais pas comment gérer les attributs correctement par exemple dans elem2 il y a un nom d'attribut 'attri1' il peut aussi s'agir d'un autre attribut, besoin maintenant du nom de l'attribut et de sa valeur. chaque attribut est objet différent. – boris

Répondre

0

Eh bien, vous devez avoir une définition de schéma pour votre xml qui couvre tous vos cas. Si vous avez besoin d'une structure dynamique, vous devez la construire d'une manière différente avec les paires de valeurs clés &. Ex:

< Attribute>

<name >ID</name > 
<value > 123</value > 

OU

< Nom d'attribut = valeur "ID" = "123">

Cela vous donnera une collection de attributs pour chaque élément. Cela peut être représenté dans votre schéma.Une fois que vous avez le schéma, vous pouvez générer ou créer vos objets.

+0

Je n'ai pas de définition de chema pour mon xml. Je dois travailler avec ce xml car c'est l'entrée dont mon application a besoin pour travailler avec – boris

+0

Dans ce cas, considérez l'analyseur DOM, vous pouvez les convertir en interne en paires clé/valeur comme l'objet que vous avez mentionné. Pour JAXB, autant que je sache, il est mappé sur un schéma. – isobar

+0

Queation - comment puis-je définir p1 (elem java objet qui est généré à partir de la valeur xml) au nom du premier élément - qui est elem1? il est somthing i besoin d'ajouter à l'aide élém classe annotations .. quelque chose comme ceci: élém public class { XmlAttribute public String p1; XmlAttribute public String p2; carte publique p1; } – boris