3

パラメータを使用して列挙型からxmlを作成したいと思います。

例えば:

@XmlRootElement(name="category")  
@XmlAccessorType(XmlAccessType.NONE)  
public enum category{  
     FOOD(2, "egg"),  

     private final double value;  

     @XmlElement  
     private final String description;  


    private Category(double value, String name){  

       this.value = value;  
       this.description = name;  
    }  
}    

生成されたXMLをこのようにしたい

 <category>  
 FOOD
 <description>Egg</description>  
 </category> 

しかし、これは私が持っているものです:

<category>FOOD</category>  

javax.xml.bind.annotationからの任意のアノテーションがこれを行うことができますか?

私の悪い英語でごめんなさい

4

1 に答える 1

0

あなたはこれが欲しいかもしれません

marshaller.marshal(new Root(), writer);

出力<root><category description="egg">FOOD</category></root>

@XmlValueと@XmlElementは同じクラスに含めることができないため、属性に変更します

@XmlJavaTypeAdapter(CategoryAdapter.class)
enum Category {
    FOOD(2D, "egg");

    private double value;

    @XmlAttribute
    String description;

    Category(double value, String name) {
        this.value = value;
        this.description = name;
    }
}

@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
class Root {
    @XmlElementRef
    Category c = Category.FOOD;
}

@XmlRootElement(name = "category")
@XmlAccessorType(XmlAccessType.NONE)
class PrintableCategory {

    @XmlAttribute
    //@XmlElement
    String description;

    @XmlValue
    String c;
}

class CategoryAdapter extends XmlAdapter<PrintableCategory, Category> {

    @Override
    public Category unmarshal(PrintableCategory v) throws Exception {
        return Category.valueOf(v.c);
    }

    @Override
    public PrintableCategory marshal(Category v) throws Exception {
        PrintableCategory printableCategory = new PrintableCategory();
        printableCategory.description = v.description;
        printableCategory.c = v.name();
        return printableCategory;
    }

}
于 2012-10-08T17:28:41.017 に答える