java xml嵌套循环,Java HTML/XML - 如何使用JAXB解组xml项的嵌套列表

import java.io.StringReader;

import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.List;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.Marshaller;

import javax.xml.bind.Unmarshaller;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlElementWrapper;

import javax.xml.bind.annotation.XmlRootElement;

public class Main {

public static void main(String[] args) throws Exception {

List elementList = new ArrayList();

List itemList = new ArrayList();

Element element1 = new Element();

Element element2 = new Element();

Item item1 = new Item();

Item item2 = new Item();

Elements elements = new Elements();

item1.setId(1);

item1.setName("Test1");

item2.setId(2);

item2.setName("Test2");

itemList.add(item1);

itemList.add(item2);

element1.setProperty1("prop1");

element1.setProperty2("prop2");

element1.setType(2);

element1.setItems(itemList);

element2.setProperty1("prop11");

element2.setProperty2("prop22");

element2.setType(22);

element2.setItems(itemList);

elementList.add(element1);

elementList.add(element2);

elements.setElements(elementList);

System.out.println("------- Object to XML -----------\n");

JAXBContext jaxbContext = JAXBContext.newInstance(Elements.class);

Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

// output pretty printed

jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

jaxbMarshaller.marshal(elements, System.out);

System.out.println("\n------- XML to Object -----------\n");

String xml = "1Test12Test2prop1prop221Test12Test2prop11prop2222";

StringReader reader = new StringReader(xml);

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

Elements elementsOut = (Elements) jaxbUnmarshaller.unmarshal(reader);

System.out.println(elementsOut);

}

@XmlRootElement(name = "elements")

public static class Elements {

List elements;

@XmlElement(name = "element")

public List getElements() {

return elements;

}

public void setElements(List elements) {

this.elements = elements;

}

@Override

public String toString() {

Field[] fields = this.getClass().getDeclaredFields();

String res = "";

try {

for (Field field : fields) {

res += field.getName() + " :\n" + field.get(this);

}

} catch (Exception e) {

e.printStackTrace();

}

return res;

}

}

public static class Element {

Integer type;

String property1;

String property2;

List items;

public Integer getType() {

return type;

}

public void setType(Integer type) {

this.type = type;

}

public String getProperty1() {

return property1;

}

public void setProperty1(String property1) {

this.property1 = property1;

}

public String getProperty2() {

return property2;

}

public void setProperty2(String property2) {

this.property2 = property2;

}

@XmlElementWrapper(name = "items")

@XmlElement(name = "item")

public List getItems() {

return items;

}

public void setItems(List items) {

this.items = items;

}

@Override

public String toString() {

Field[] fields = this.getClass().getDeclaredFields();

String res = "\n";

try {

for (Field field : fields) {

res += field.getName() + " : " + field.get(this) + "\n";

}

} catch (Exception e) {

e.printStackTrace();

}

return res;

}

}

public static class Item {

Integer id;

String name;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

Field[] fields = this.getClass().getDeclaredFields();

String res = "{";

try {

for (Field field : fields) {

res += field.getName() + " : " + field.get(this);

}

res += "}";

} catch (Exception e) {

e.printStackTrace();

}

return res;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值