1

私はこのクラスを持っています

@XStreamAlias("myConfig")
public class MyConfig {
    ... // other properties

    // What do I put here? 
    private List<String> includes;
}

そして、私はこの出力が欲しいです:

<myConfig>
    ...
    <includes>
        <includes>foo</include>
        <includes>bar</include>
    </includes>
</myConfig>

要素が失われるため、これは機能しません。

    @XStreamImplicit(itemFieldName = "include") // Loses <includes> element
    private List<String> includes;
4

2 に答える 2

2

あなたの質問はでタグ付けされているので、あなたのコメントに基づいています。

@BlaiseDoughanはい、jaxbもそうです。JAXBはXSDを生成できるため、長期的にはxstreamからjaxbに切り替えることを検討するかもしれません。

JAXB(JSR-222)実装を使用すると、次のようになります。

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
public class MyConfig {

    private List<String> includes;

    @XmlElementWrapper
    @XmlElement(name = "include")
    public List<String> getIncludes() {
        return includes;
    }

    public void setIncludes(List<String> includes) {
        this.includes = includes;
    }

}

詳細については

于 2013-01-25T12:27:10.743 に答える
1

探している正確なxml構造を取得するには、コードを少し調整する必要があります。基本的に、値のリストを持つIncludesラッパーオブジェクトが必要です。

これがxmlを生成する私のコードです

public class XSTreamAnnotTest {

    static class Includes {

        @XStreamImplicit(itemFieldName = "include")
        private List<String> include;

        Includes(List<String> include) {
            this.include = include;
        }
    }

    @XStreamAlias("myConfig")
    static class MyConfig {

        private Includes includes;

        public MyConfig(Includes includes) {
            this.includes = includes;
        }

    }

    public static void main(String args[]) throws Exception {
        XStream stream = new XStream();
        stream.processAnnotations(MyConfig.class);
        ArrayList<String> list = new ArrayList<String>();
        list.add("foo");
        list.add("bar");
        Includes cu = new Includes(list);

        MyConfig msg = new MyConfig(cu);
        System.out.println(stream.toXML(msg));
    }
}
于 2013-02-01T00:59:40.883 に答える