使用JAXBContext 设置xml节点属性

JAXBContext 设置xml节点属性

在使用JAXBContext将javaBean转化为xml时

会出现这样的需求:


    ....

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

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

@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文件大致为:


    111111
    
 111
 fee
 payname
 accountType
    

JAXBContext解析XML集合对象

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

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

    ...
    ...

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

    @XmlElementWrapper(name="items")
    @XmlElement(name="item")
    public List items;

将会生成这样的XML样式:

    
        ...
        ...
    

Demo如下:

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

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集合的实体类):

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 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 getItems() {
  return items;
 }
 
 @XmlElementWrapper(name="Items")
 @XmlElement(name="Item")
 public void setItems(List items) {
  this.items = items;
 }  
}

测试方法:

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) {
  //  
D41D8CD98F00B204E9800998ECF8427E // // TODO Auto-generated method stub Item item = new Item("LOGIN","789", "xxx","xxx"); List list = new ArrayList(); 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(); } } }

输出:



    
    
        
            789
            xxx
            xxx
        
    

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

你可能感兴趣的:(使用JAXBContext 设置xml节点属性)