JAXBContext解析XML集合对象

前端之家收集整理的这篇文章主要介绍了JAXBContext解析XML集合对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@XmlElementWrapper 为数组元素或集合元素定义一个父节点。
如,类中有一元素为List items,若不加此注解,该元素将被映射为
<items>...</items>
<items>...</items>
这种形式,此注解可将这个元素进行包装,如:
@XmlElementWrapper(name="items")
@XmlElement(name="item")
public List items;
将会生成这样的XML样式:
<items>
<item>...</item>
<item>...</item>

</items>


Demo如下:


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

  1. package org.ywzn.po;
  2.  
  3. import javax.xml.bind.annotation.XmlAttribute;
  4.  
  5. public class Item {
  6.  
  7. private String infoType;
  8.  
  9. private String nodeId;
  10.  
  11. private String resultCode;
  12.  
  13. private String resultString;
  14.  
  15. public Item() {
  16. super();
  17. }
  18.  
  19. public Item(String infoType,String nodeId,String resultCode,String resultString) {
  20. super();
  21. this.infoType = infoType;
  22. this.nodeId = nodeId;
  23. this.resultCode = resultCode;
  24. this.resultString = resultString;
  25. }
  26.  
  27. @XmlAttribute(name = "InfoType")
  28. public String getInfoType() {
  29. return infoType;
  30. }
  31.  
  32. public void setInfoType(String infoType) {
  33. this.infoType = infoType;
  34. }
  35.  
  36. public String getNodeId() {
  37. return nodeId;
  38. }
  39.  
  40. public void setNodeId(String nodeId) {
  41. this.nodeId = nodeId;
  42. }
  43.  
  44. public String getResultCode() {
  45. return resultCode;
  46. }
  47.  
  48. public void setResultCode(String resultCode) {
  49. this.resultCode = resultCode;
  50. }
  51.  
  52. public String getResultString() {
  53. return resultString;
  54. }
  55.  
  56. public void setResultString(String resultString) {
  57. this.resultString = resultString;
  58. }
  59.  
  60. }

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

  1. package org.ywzn.po;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.xml.bind.annotation.XmlAttribute;
  6. import javax.xml.bind.annotation.XmlElement;
  7. import javax.xml.bind.annotation.XmlElementWrapper;
  8. import javax.xml.bind.annotation.XmlRootElement;
  9.  
  10. @XmlRootElement
  11. public class Message {
  12.  
  13. private String version;
  14. private Head head;
  15. private List<Item> items;
  16.  
  17. @XmlAttribute(name="version")
  18. public String getVersion() {
  19. return version;
  20. }
  21.  
  22. public void setVersion(String version) {
  23. this.version = version;
  24. }
  25.  
  26. @XmlElement(name="Head")
  27. public Head getHead() {
  28. return head;
  29. }
  30.  
  31. public void setHead(Head head) {
  32. this.head = head;
  33. }
  34.  
  35. public List<Item> getItems() {
  36. return items;
  37. }
  38.  
  39. @XmlElementWrapper(name="Items")
  40. @XmlElement(name="Item")
  41. public void setItems(List<Item> items) {
  42. this.items = items;
  43. }
  44.  
  45.  
  46. }


测试方法:

  1. package org.ywzn.main;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import javax.xml.bind.JAXBContext;
  7. import javax.xml.bind.JAXBException;
  8. import javax.xml.bind.Marshaller;
  9.  
  10. import org.ywzn.po.Head;
  11. import org.ywzn.po.Item;
  12. import org.ywzn.po.Message;
  13. import org.ywzn.po.Parameters;
  14. import org.ywzn.po.Room;
  15.  
  16. public class Java2XMLMany {
  17.  
  18. public static void main(String[] args) {
  19. // <?xml version='1.0' encoding='UTF-8' standalone='no' ?> <Message
  20. // version='1.0'><Header Time='2015-05-22 10:34:27' MessageType='LOGIN'
  21. // BusinessId='B730EB39-CEFF-4a38-B633-D8936EB8AEF7' SessionId='936'
  22. // /><Parameters> <items Sum='1' Offset='1' Cur='1'> <item
  23. // Infotype='LogUser'> <PassWord
  24. // >D41D8CD98F00B204E9800998ECF8427E</PassWord></item> </items>
  25. // </Parameters> </Message>
  26.  
  27. // TODO Auto-generated method stub
  28. Item item = new Item("LOGIN","789","xxx","xxx");
  29. List<Item> list = new ArrayList<Item>();
  30. list.add(item);
  31. Head head = new Head("2015-05-21 16:46:14","LOGIN","8D24CE2B-5");
  32. Parameters parameters = new Parameters(list);
  33. // Message message = new Message(head,"1.0",parameters);
  34. Message message = new Message();
  35. message.setVersion("1.0");
  36. message.setHead(head);
  37. message.setItems(list);
  38. try {
  39. JAXBContext context = JAXBContext.newInstance(Message.class);
  40. Marshaller createMarshaller = context.createMarshaller();
  41. createMarshaller
  42. .setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);// 是否格式化生成的xml串
  43.  
  44. createMarshaller.marshal(message,System.out);
  45. } catch (JAXBException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49.  
  50. }

输出:

  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <message version="1.0">
  3. <Head businessId="8D24CE2B-5" MessageType="LOGIN" Time="2015-05-21 16:46:14"/>
  4. <Items>
  5. <Item InfoType="LOGIN">
  6. <nodeId>789</nodeId>
  7. <resultCode>xxx</resultCode>
  8. <resultString>xxx</resultString>
  9. </Item>
  10. </Items>
  11. </message>

猜你在找的XML相关文章