如何使用JAXBContext设置xml节点属性
短信预约 -IT技能 免费直播动态提醒
这篇文章给大家分享的是有关如何使用JAXBContext设置xml节点属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
JAXBContext 设置xml节点属性
在使用JAXBContext将javaBean转化为xml时
会出现这样的需求:
<xml version="2.0"> ....</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文件大致为:
<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,若不加此注解,该元素将被映射为
<items>...</items> <items>...</items>
这种形式,此注解可将这个元素进行包装,如:
@XmlElementWrapper(name="items") @XmlElement(name="item") public List items;
将会生成这样的XML样式:
<items> <item>...</item> <item>...</item> </items>
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; @XmlRootElementpublic 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; } }
测试方法:
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(); } } }
输出:
<?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>
感谢各位的阅读!关于“如何使用JAXBContext设置xml节点属性”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341