

こんにちは。  
現在以下のようなソースコードでxmlを生成しています。

[code]

    public class Main {
    
        public static void main(String[] args) {
    
            Kusa kusa = new Kusa();
            kusa.setKusa("草");
            Kusa2 kusa2 = new Kusa2();
            kusa2.setKusa2("草2");
            kusa.setKusa2(kusa2);
            Kusa3 kusa3 = new Kusa3();
            kusa3.setKusa3("草３");
            kusa.setKusa3(kusa3);
            System.out.println("**************************************");
            JAXB.marshal(kusa, System.out);
            System.out.println("**************************************");
        }
    }
    
[/code]

[code]

    public class Kusa {
    
        private String kusa;
        private Kusa2 kusa2;
        private Kusa3 kusa3;
        @XmlElement(nillable = true)
        public String getKusa() {
            return kusa;
        }
    
        public void setKusa(String kusa) {
            this.kusa = kusa;
        }
    
        public Kusa2 getKusa2() {
            return kusa2;
        }
    
        public void setKusa2(Kusa2 kusa2) {
            this.kusa2 = kusa2;
        }
        public Kusa3 getKusa3() {
            return kusa3;
        }
    
        public void setKusa3(Kusa3 kusa3) {
            this.kusa3 = kusa3;
        }
    
    }
    
[/code]

[code]

    public class Kusa2 {
        private String kusa2;
    
    
        public String getKusa2() {
            return kusa2;
        }
        @XmlElement(nillable = true)
        public void setKusa2(String kusa2) {
            this.kusa2 = kusa2;
        }
    
    }
    
[/code]

[code]

    public class Kusa3 {
        private String kusa3;
    
        public String getKusa3() {
            return kusa3;
        }
        @XmlElement(nillable = true)
        public void setKusa3(String kusa3) {
            this.kusa3 = kusa3;
        }
    }
    
[/code]

このソースにより生成されるxmlが

[code]

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <kusa>
        <kusa>草</kusa>
        <kusa2>
            <kusa2>草2</kusa2>
        </kusa2>
        <kusa3>
            <kusa3>草３</kusa3>
        </kusa3>
    </kusa>
    
[/code]

になるのですが、やりたいこととして、kusa2・kusa3のクラスを分けた状態で、

[code]

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <kusa>
        <kusa>草</kusa>
        <kusa2>
            <kusa2>草2</kusa2>
            <kusa3>草３</kusa3>
        </kusa2>
    </kusa>
    
[/code]

の様にxmlを出力したいです。

勉強を始めて間もない為、見当違いなことを言っているかもしれませんが、ご教授のほど宜しくお願いします。


CC BY-SA 4.0
2020-04-22T04:36:55.797
65845
2020-04-28T07:33:06.773
37980
question
java xml
JAXB.marshal時の階層について


`kusa2`と`kusa3`をelementに持つクラスを新しく定義してやればよいかと考えます。  
下記では `Kusa2Parent` というクラスを定義しています。

[code]

    class Kusa {
    
        private String kusa;
        private Kusa2Parent kusa2 = new Kusa2Parent();
    
        @XmlElement(nillable = true)
        public String getKusa() {
            return kusa;
        }
    
        public void setKusa(String kusa) {
            this.kusa = kusa;
        }
    
        @XmlElement(nillable = true, name = "kusa2")
        public Kusa2Parent getKusa2() {
            return kusa2;
        }
    
        public void setKusa2(Kusa2 kusa2) {
            this.kusa2.setKusa2(kusa2);
        }
    
        public void setKusa3(Kusa3 kusa3) {
            this.kusa2.setKusa3(kusa3);
        }
    }
    
    class Kusa2Parent {
        private Kusa2 kusa2;
        private Kusa3 kusa3;
    
        @XmlElement
        public String getKusa2() {
            return kusa2.getKusa2();
        }
    
        @XmlElement
        public String getKusa3() {
            return kusa3.getKusa3();
        }
    
        public void setKusa2(Kusa2 kusa2) {
            this.kusa2 = kusa2;
        }
    
        public void setKusa3(Kusa3 kusa3) {
            this.kusa3 = kusa3;
        }
    }
    
[/code]

[コード差分](https://github.com/yukihane/stackoverflow-qa/compare/01eca65..1f249e9)


CC BY-SA 4.0
2020-04-28T07:26:43.943
66061
2020-04-28T07:33:06.773
2020-04-28T07:33:06.773
2808
2808
65845
answer