2011-07-19 1 views
2

xml:Jaxb - comment est-ce que je démélange un élément xml à plusieurs champs?

<root> <element>value (something)</element> </root>

Je dois unmarshall ce xml à deux champs différents dans ma classe java.

J'ai essayé ce qui suit, mais cela n'a pas fonctionné. le premier champ avait la bonne valeur et le second était nul.

java:

@XmlElement(name="element") 
@XmlJavaTypeAdapter(TakeValueBeforeParentheses.class) 
private String one; 

@XmlElement(name="element") 
@XmlJavaTypeAdapter(TakeValueInParentheses.class) 
private String two; 

Comment puis-je parvenir sans créer une classe pour tenir les deux valeurs et la carte que pour « élément »?

Répondre

7

Vous pouvez annoter setters et non des champs, puis faire valeur d'analyse syntaxique setter à deux champs:

@XmlElement(name="element") 
void setElement(String value) { 
    // parse value 
    StringTokenizer st = new StringTokenizer(value, "()"); 
    this.one = st.nextToken().trim(); 
    this.two = st.nextToken().trim(); 
} 
+0

pas exactement la solution que j'espérais, mais il fonctionne bien :) ty – Sam

0

Je pense qu'il est une mauvaise pratique, parce que le système unmarchalling jouer avec des séparateurs de marqueurs seulement. Vous pouvez diviser la ligne après le déballage du fichier XML.

Pourquoi ne pas utiliser ce format xml:

<root><elements><element>value</element><element>something</element></elements></root> 
+0

Le côté xml n'est pas sous mon contrôle. – Sam

Questions connexes