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):

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<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>

猜你在找的XML相关文章