好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用JAXBContext 设置xml节点属性

JAXBContext 设置xml节点属性

在使用JAXBContext将javaBean转化为xml时

会出现这样的需求:

?

1

2

3

< xml version = "2.0" >

     ....

</ xml >

那么xml节点里的属性值version需要怎么设置

使用@XmlAttribute标签即可,如下代码。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

@XmlRootElement (name = "Xml" )

@XmlAccessorType (XmlAccessType.FIELD)

public class RequestBean{

 

     @XmlAttribute (name = "version" ) //设置节点属性

     private String version;

     private Body body;        

     @XmlElement (name = "sign" )  //设置子节点

     private String sign;

     //省略封装

}

 

@XmlRootElement (name = "Body" )

@XmlAccessorType (XmlAccessType.FIELD)

public class Body{

     ...

}

最终得到的xml文件大致为:

?

1

2

3

4

5

6

7

8

9

< Xml version = "2.0" >

     < sign >111111</ sign >

     < Body >

  < Amount >111</ Amount >

  < Fee >fee</ Fee >

  < PayerName >payname</ PayerName >

  < AccountType >accountType</ AccountType >

     </ Body >

</ Xml >

JAXBContext解析XML集合对象

@XmlElementWrapper 为数组元素或集合元素定义一个父节点。

如,类中有一元素为List items,若不加此注解,该元素将被映射为

?

1

2

< items >...</ items >

< items >...</ items >

这种形式,此注解可将这个元素进行包装,如:

?

1

2

3

@XmlElementWrapper (name= "items" )

@XmlElement (name= "item" )

public List items;

将会生成这样的XML样式:

?

1

2

3

4

< items >

     < item >...</ item >

     < item >...</ item >

</ items >

Demo如下:

实体类一(定义一个被包含的子项Item):

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

package org.ywzn.po;

import javax.xml.bind.annotation.XmlAttribute;

public class Item {

  private String infoType;

  private String nodeId;

  private String resultCode;

  private String resultString;

  public Item() {

   super ();

  }

 

  public Item(String infoType, String nodeId, String resultCode,

    String resultString) {

   super ();

   this .infoType = infoType;

   this .nodeId = nodeId;

   this .resultCode = resultCode;

   this .resultString = resultString;

  }

 

  @XmlAttribute (name = "InfoType" )

  public String getInfoType() {

   return infoType;

  }

 

  public void setInfoType(String infoType) {

   this .infoType = infoType;

  }

 

  public String getNodeId() {

   return nodeId;

  }

 

  public void setNodeId(String nodeId) {

   this .nodeId = nodeId;

  }

 

  public String getResultCode() {

   return resultCode;

  }

 

  public void setResultCode(String resultCode) {

   this .resultCode = resultCode;

  }

 

  public String getResultString() {

   return resultString;

  }

 

  public void setResultString(String resultString) {

   this .resultString = resultString;

  }

}

实体类二(定义一个有List集合的实体类):

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

package org.ywzn.po;

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlElementWrapper;

import javax.xml.bind.annotation.XmlRootElement;

 

@XmlRootElement

public class Message {

  private String version;

  private Head head;

  private List<Item> items;

  @XmlAttribute (name= "version" )

  public String getVersion() {

   return version;

  }

 

  public void setVersion(String version) {

   this .version = version;

  }

 

  @XmlElement (name= "Head" )

  public Head getHead() {

   return head;

  }

 

  public void setHead(Head head) {

   this .head = head;

  }

 

  public List<Item> getItems() {

   return items;

  }

 

  @XmlElementWrapper (name= "Items" )

  @XmlElement (name= "Item" )

  public void setItems(List<Item> items) {

   this .items = items;

  } 

}

测试方法:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

package org.ywzn.main;

import java.util.ArrayList;

import java.util.List;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

import org.ywzn.po.Head;

import org.ywzn.po.Item;

import org.ywzn.po.Message;

import org.ywzn.po.Parameters;

import org.ywzn.po.Room;

 

public class Java2XMLMany {

  public static void main(String[] args) {

   // <?xml version='1.0' encoding='UTF-8' standalone='no' ?> <Message

   // version='1.0'><Header Time='2015-05-22 10:34:27' MessageType='LOGIN'

   // BusinessId='B730EB39-CEFF-4a38-B633-D8936EB8AEF7' SessionId='936'

   // /><Parameters> <items Sum='1' Offset='1' Cur='1'> <item

   // Infotype='LogUser'> <PassWord

   // >D41D8CD98F00B204E9800998ECF8427E</PassWord></item> </items>

   // </Parameters> </Message>

 

   // TODO Auto-generated method stub

   Item item = new Item( "LOGIN" , "789" , "xxx" , "xxx" );

   List<Item> list = new ArrayList<Item>();

   list.add(item);

   Head head = new Head( "2015-05-21 16:46:14" , "LOGIN" , "8D24CE2B-5" );

   Parameters parameters = new Parameters(list);

   // Message message = new Message(head,"1.0",parameters);

   Message message = new Message();

   message.setVersion( "1.0" );

   message.setHead(head);

   message.setItems(list);

   try {

    JAXBContext context = JAXBContext.newInstance(Message. class );

    Marshaller createMarshaller = context.createMarshaller();

    createMarshaller

      .setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true ); // 是否格式化生成的xml串

 

    createMarshaller.marshal(message, System.out);

   } catch (JAXBException e) {

    e.printStackTrace();

   }

  }

 

}

输出:

?

1

2

3

4

5

6

7

8

9

10

11

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

< message version = "1.0" >

     < Head businessId = "8D24CE2B-5" MessageType = "LOGIN" Time = "2015-05-21 16:46:14" />

     < Items >

         < Item InfoType = "LOGIN" >

             < nodeId >789</ nodeId >

             < resultCode >xxx</ resultCode >

             < resultString >xxx</ resultString >

         </ Item >

     </ Items >

</ message >

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/Dawn_Bells/article/details/81908275

查看更多关于使用JAXBContext 设置xml节点属性的详细内容...

  阅读:22次