java xstream list_xstream 复杂结构的xml转javabean

1、引入XStream工具,maven配置如下:

335b83df261c422459d4afc29ba290e5.png

d1b641f023dd079c9e4a800b96607d9d.gif

1

2 com.thoughtworks.xstream

3 xstream

4 1.4.10

5

View Code

2、要解析的xml格式如下:

335b83df261c422459d4afc29ba290e5.png

d1b641f023dd079c9e4a800b96607d9d.gif

1 <?xml version="1.0" encoding="UTF-8"?>

2

3

4 ccp

5

6

7

8 true

9 from11

10 to11

11 cc11

12 bcc11

13

14 testcode1-zh

15 testcode2-zh

16 testcode3-zh

17

18

19 testcode1-en

20 testcode2-en

21 testcode3-en

22

23

24

25

View Code

3、根据xml的结构定义对应的Java对象。定义的时候使用到相关的注解@XStreamAlias、@XStreamAsAttribute、@XStreamImplicit(具体解析参考https://blog.csdn.net/Robert_mm/article/details/8459879)

根节点类如下:

335b83df261c422459d4afc29ba290e5.png

d1b641f023dd079c9e4a800b96607d9d.gif

1 importcom.thoughtworks.xstream.annotations.XStreamAlias;2 importjava.util.ArrayList;3 importjava.util.List;4

5 @XStreamAlias("mail-config")6 public classMailConfig {7 privateMailHead head;8 private List mails=new ArrayList();9

10 publicMailHead getHead() {11 returnhead;12 }13

14 public voidsetHead(MailHead head) {15 this.head =head;16 }17

18 public ListgetMails() {19 returnmails;20 }21

22 public void setMails(Listmails) {23 this.mails =mails;24 }25 }

View Code

第二层定义如下:

head

335b83df261c422459d4afc29ba290e5.png

d1b641f023dd079c9e4a800b96607d9d.gif

1 importcom.thoughtworks.xstream.annotations.XStreamAlias;2

3 importjava.io.Serializable;4

5 @XStreamAlias("head")6 public class MailHead implementsSerializable {7 privateString systemType;8 privateString systemCode;9

10 publicString getSystemType() {11 returnsystemType;12 }13

14 public voidsetSystemType(String systemType) {15 this.systemType =systemType;16 }17

18 publicString getSystemCode() {19 returnsystemCode;20 }21

22 public voidsetSystemCode(String systemCode) {23 this.systemCode =systemCode;24 }25 }

View Code

mail类中注意注解@XStreamImplicit(itemFieldName="mailBody"),根据xml结构mailBody是没有根节点的,并排两个作为一个List,所以此处要使用这个注解才能正确解析成功。

335b83df261c422459d4afc29ba290e5.png

d1b641f023dd079c9e4a800b96607d9d.gif

1 importcom.thoughtworks.xstream.annotations.XStreamAlias;2 importcom.thoughtworks.xstream.annotations.XStreamImplicit;3

4 importjava.io.Serializable;5 importjava.util.List;6

7 @XStreamAlias("mail")8 public class Mail implementsSerializable {9 private boolean isOneTest=false;10 privateString mialfrom;11 privateString mailto;12 privateString mailcc;13 privateString mailbcc;14

15 @XStreamImplicit(itemFieldName="mailBody")16 private ListmailBodys;17

18 public booleanisOneTest() {19 returnisOneTest;20 }21

22 public void setOneTest(booleanoneTest) {23 isOneTest =oneTest;24 }25

26 publicString getMialfrom() {27 returnmialfrom;28 }29

30 public voidsetMialfrom(String mialfrom) {31 this.mialfrom =mialfrom;32 }33

34 publicString getMailto() {35 returnmailto;36 }37

38 public voidsetMailto(String mailto) {39 this.mailto =mailto;40 }41

42 publicString getMailcc() {43 returnmailcc;44 }45

46 public voidsetMailcc(String mailcc) {47 this.mailcc =mailcc;48 }49

50 publicString getMailbcc() {51 returnmailbcc;52 }53

54 public voidsetMailbcc(String mailbcc) {55 this.mailbcc =mailbcc;56 }57

58 public ListgetMailBodys() {59 returnmailBodys;60 }61

62 public void setMailBodys(ListmailBodys) {63 this.mailBodys =mailBodys;64 }65 }

View Code

335b83df261c422459d4afc29ba290e5.png

d1b641f023dd079c9e4a800b96607d9d.gif

importcom.thoughtworks.xstream.annotations.XStreamAlias;importcom.thoughtworks.xstream.annotations.XStreamAsAttribute;importjava.io.Serializable;

@XStreamAlias("mailBody")public class MailBodyConfig implementsSerializable {

@XStreamAsAttributeprivateString id;//xml中的节点名为:TestCode1,解决名称不对应问题

@XStreamAlias("TestCode1")privateString testCode1;

@XStreamAlias("TestCode2")privateString testCode2;

@XStreamAlias("TestCode3")privateString testCode3;publicString getId() {returnid;

}public voidsetId(String id) {this.id =id;

}publicString getTestCode1() {returntestCode1;

}public voidsetTestCode1(String testCode1) {this.testCode1 =testCode1;

}publicString getTestCode2() {returntestCode2;

}public voidsetTestCode2(String testCode2) {this.testCode2 =testCode2;

}publicString getTestCode3() {returntestCode3;

}public voidsetTestCode3(String testCode3) {this.testCode3 =testCode3;

}

}

View Code

具体调用测试代码如下:

335b83df261c422459d4afc29ba290e5.png

d1b641f023dd079c9e4a800b96607d9d.gif

1 public voidTestXml()2 {3 String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +

4 "\n" +

5 "

\n" +

6 " ccp\n" +

7 " \n" +

8 " \n" +

9 " \n" +

10 " true\n" +

11 " from11\n" +

12 " to11\n" +

13 " cc11\n" +

14 " bcc11\n" +

15 " \n" +

16 " testcode1zh\n" +

17 " testcode2zh\n" +

18 " testcode3zh\n" +

19 " \n" +

20 " \n" +

21 " testcode1-en\n" +

22 " testcode2-en\n" +

23 " testcode3-en\n" +

24 " \n" +

25 " \n" +

26 " \n" +

27 "";28 //设置了这个别名才能识别下面 xml 中的 类对象节点的别名,否则要用类全限名称

29 XStream xstream = newXStream();30 XStream.setupDefaultSecurity(xstream);31 xstream.autodetectAnnotations(true);32 xstream.alias("mail-config",MailConfig.class);33 xstream.allowTypes(new Class[]{MailConfig.class, Mail.class});34

35 System.out.print(xml);36 MailConfig mailconfig=(MailConfig)xstream.fromXML(xml);37

38 System.out.print("转换成功!");39 }

View Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值