2

JAXB Unmarshaller を使用して、XML ドキュメントを Java オブジェクトに生成しようとしています。XML ドキュメントで、クラス List のクラス Java オブジェクトに提示される要素があるが、結果のオブジェクト List が空である場合、it 要素にコンテンツがあります。

XML ドキュメント内の要素は Java 上のクラス表現ほど完全ではないため、JAXB は XML ドキュメントをクラス表現に解析できなくなるのでしょうか?

私を助けることができる人はいますか、なぜそれが起こったのですか、そして解決策は何ですか?

4

1 に答える 1

0

オブジェクト モデルまたは XML ドキュメントを知らなければ、非整列化操作が正しく機能しない理由を判断するのは困難です。以下に、ユースケースで何が問題なのかを理解するのに役立つ、ラップされたコレクションとラップされていないコレクションの例を示します。

input.xml/出力

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <item>A</item>
    <item>B</item>
    <item>C</item>
    <items>
        <item>D</item>
        <item>E</item>
        <item>F</item>
    </items>
</root>

ラップされたコレクションでは、@XmlElementWrapper注釈を使用してラッパー要素を指定します。

package forum11219454;

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

@XmlRootElement
public class Root {

    private List<String> list;
    private List<String> nestedList;

    @XmlElement(name="item")
    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    @XmlElementWrapper(name="items")
    @XmlElement(name="item")
    public List<String> getNestedList() {
        return nestedList;
    }

    public void setNestedList(List<String> nestedList) {
        this.nestedList = nestedList;
    }

}

デモ

package forum11219454;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum11219454/input.xml");
        Root root = (Root) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }

}

詳細については

于 2012-06-27T10:17:17.183 に答える