栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JAXB将多个XML元素解组到单个类中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAXB将多个XML元素解组到单个类中

@XmlElementWrapper将完成此工作:

@XmlElementWrapper(name="Wrapper")@XmlElement(name="Channel")private List<Channel> channels;

对于更高级的情况,可以在Eclipselink JAXB(MOXy)中使用@XmlPath扩展:

  • http://bdoughan.blogspot.com/2010/09/xpath-based-mapping-geopre-example.html

这是我到目前为止所拥有的。我仍在尝试消除对辅助对象的需要。该示例需要Eclipselink
JAXB(MOXy)

模型对象

您的模型对象是:

package example;import java.util.ArrayList;import java.util.List;public class Wrapper {    private List<Channel> channels = new ArrayList<Channel>();    public List<Channel> getChannels() {        return channels;    }    public void setChannels(List<Channel> channels) {        this.channels = channels;    }}

和:

package example;import javax.xml.bind.annotation.XmlID;public class Channel {    private String id;    private String type;    private String name;    @XmlID    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getType() {        return type;    }    public void setType(String type) {        this.type = type;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

辅助对象

我当前的解决方案涉及一些帮助对象:

package example.adapted;import java.util.List;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlElementWrapper;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlTransient;import javax.xml.bind.annotation.XmlType;import example.Channel;import example.Wrapper;@XmlRootElement(name="Output")@XmlType(propOrder={"channels", "channelNames"})public class AdaptedWrapper {    private Wrapper wrapper = new Wrapper();    private List<ChannelName> channelNames;    @XmlTransient    public Wrapper getWrapper() {        for(ChannelName channelName : channelNames) { channelName.getChannel().setName(channelName.getName());        }        return wrapper;    }    @XmlElementWrapper(name="Wrapper")    @XmlElement(name="Channel")    public List<Channel> getChannels() {        return wrapper.getChannels();    }    public void setChannels(List<Channel> channels) {        wrapper.setChannels(channels);    }    @XmlElementWrapper(name="Wrapper")    @XmlElement(name="ChannelName")    public List<ChannelName> getChannelNames() {        return channelNames;    }    public void setChannelNames(List<ChannelName> channelNames) {        this.channelNames = channelNames;    }}

和:

package example.adapted;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlIDREF;import example.Channel;public class ChannelName {    private String name;    private Channel channel;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @XmlIDREF    @XmlElement(name="id")    public Channel getChannel() {        return channel;    }    public void setChannel(Channel channel) {        this.channel = channel;    }}

示范代码

package example;import java.io.File;import javax.xml.bind.JAXBContext;import javax.xml.bind.Unmarshaller;import example.adapted.AdaptedWrapper;public class Demo {    public static void main(String[] args) throws Exception {        JAXBContext jc = JAXBContext.newInstance(AdaptedWrapper.class);        File xml = new File("input.xml");        Unmarshaller unmarshaller = jc.createUnmarshaller();        AdaptedWrapper adaptedWrapper = (AdaptedWrapper) unmarshaller.unmarshal(xml);        Wrapper wrapper = adaptedWrapper.getWrapper();        for(Channel channel : wrapper.getChannels()) { System.out.println(channel.getName());        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515084.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号