xstream list转xml问题

weixin_38656721 2018-01-28 06:09:22
public static String initNewsMessage(String toUserName,String fromUserName){
NewsMessage newsMessage = new NewsMessage();

List<News> articles = new ArrayList<News>();
News news = new News();
news.setTitle("NBA中国官网");
news.setDescription("详细NBA信息请移步NBA官网");
news.setPicUrl("http://3608e3b8.nat123.cc/WeChat/picture/all-star.jpg");
news.setUrl("http://china.nba.com");

News news2 = new News();
news.setTitle("虎扑中国官网");
news.setDescription("详细NBA信息请移步虎扑NBA官网");
news.setPicUrl("http://3608e3b8.nat123.cc/WeChat/picture/hupu.PNG");
news.setUrl("https://nba.hupu.com");

articles.add(news);
articles.add(news2);

newsMessage.setFromUserName(toUserName);
newsMessage.setToUserName(fromUserName);
newsMessage.setCreateTime(new Date().getTime());
newsMessage.setMsgType(MESSAGE_NEWS);
newsMessage.setArticleCount(articles.size());
newsMessage.setArticles(articles);

return newsMessageToXml(newsMessage);
}

public static String newsMessageToXml(NewsMessage newsMessage){
XStream xstream = new XStream();
xstream.alias("xml", newsMessage.getClass());
xstream.alias("item", new News().getClass());
return xstream.toXML(newsMessage);
}

public class Test {
public static void main(String[] args) {
System.out.println( MessageUtil.initNewsMessage("me", "you") );
}
}

结果如下:
<xml>
<ToUserName>you</ToUserName>
<FromUserName>me</FromUserName>
<CreateTime>1517132691229</CreateTime>
<MsgType>news</MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title>虎扑中国官网</Title>
<Description>详细NBA信息请移步虎扑NBA官网</Description>
<PicUrl>http://3608e3b8.nat123.cc/WeChat/picture/hupu.PNG</PicUrl>
<Url>https://nba.hupu.com</Url>
</item>
<item/> //这里为什么出现这种情况??????list中信息丢失
</Articles>
</xml>
...全文
965 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29631799 2018-02-12
  • 打赏
  • 举报
回复
你第二个item创建的对象是news2,但是下面赋值的时候还是用news,所以 articles.add(news);
articles.add(news2);放的是同一个值
weixin_38656721 2018-02-09
  • 打赏
  • 举报
回复
为什么没有回复?????
weixin_38656721 2018-02-03
  • 打赏
  • 举报
回复
为什么没有回复?????
weixin_38656721 2018-02-01
  • 打赏
  • 举报
回复
为什么没有回复?????
XStream组件进行Object与XML用法 1.所需求jar包: xstream-1.3.1.jar 2.如果仅进行OBJECT与XML之间互只需要这一个jar 包及XStream这一个类就可又了 用法说明: 1.OBJECT XML //第一步:准备好要进行XML换的OBJECT对象,并且类里的属性都要有get与Set方法; 如下: Address address1 = new Address("郑州市经三路", "450001"); Address address2 = new Address("西安市雁塔路", "710002"); List addList = new ArrayList(); addList.add(address1); addList.add(address2); Profile profile = new Profile("软件工程师", "13512129933", "备注说明"); Person person = new Person("熔岩", "27", profile, addList); //第二步:创建一个XStream对象 XStream xStream = new XStream(); //第三步:进行换 String xml = xStream. toXML(person); System.out.println(xml); //输出如下: //你会发明输出的XML节点的类名是类的全路径名 //如果要解决这一问题就需要进行换前的装配XStream为此提供一个配置类名的方法 alias(“nodeName”,”class”); 其中nodeName 即XML的节点名称 其中class 即要映射到XML节点上的类 如: xStream.alias("PERSON", Person.class); xStream.alias("PROFILE", Profile.class); xStream.alias("ADDRESS", Address.class); //配置完成输出结果 可以看出person类的name和age属性映射出的节点名称与属性名称相同,那么XStream也支持对类属性的映射配置方法 : aliasField(“节点名称”,”类名称”,”属性名”) 如下: xStream.aliasField("PROFILE", Person.class, "profile"); xStream.aliasField("ADDLIST", Person.class, "addlist"); xStream.aliasField("Add", Address.class, "add"); xStream.aliasField("Job", Profile.class, "job"); 注:如果没有特殊要求最好不要配置属性节点的映射,否则如果再将生成的XML换成OBJECT时将会非常麻烦。 //如果我们想实现又下的需求。 //XStream 还提供了装配节点属性的方法, useAttributeFor(“类”, “属性名”); 如下: xStream.useAttributeFor(Person.class,”name”); xStream.useAttributeFor(Person.class,”age”); 2.XMLOBJECT XML OBJECT 只要调用xStream.fromXML(xml)方法,但同样要进行相关属性及类的映射。

50,542

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧