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节点属性的详细内容...