需要帮助格式化JAXB输出
我有一些对象让我们说两个,A和B.这些对象来自同一个类。 我需要使用JAXB封送这些对象,输出XML应采用以下forms:
an id an id an id value value an id value value
如何在JAXB中生成此格式? 任何帮助表示赞赏。
更新:更具体地说,假设我们有这样的Human类:
@XmlRootElement public class Human { private String name; private int age; private Integer nationalID; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Integer getNationalID() { return nationalID; } public void setNationalID(Integer nationalID) { this.nationalID = nationalID; } }
我们的主要课程是:
public class Main3 { public static void main(String[] args) throws JAXBException { Human human1 = new Human(); human1.setName("John"); human1.setAge(24); human1.setNationalID(Integer.valueOf(123456789)); JAXBContext context = JAXBContext.newInstance(Human.class); Marshaller m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); StringWriter stringWriter = new StringWriter(); m.marshal(human1, stringWriter); System.out.println(stringWriter.toString()); } }
然后输出将是:
24 John 123456789
现在我需要输出如下:
123456789 123456789 24 John
这将帮助我绘制一个没有属性的XML对象树(仅通过ID),然后绘制树下面的所有定义。 这可能使用JAXB或任何其他实现吗?
尝试这个:
import java.io.StringWriter; import javax.xml.bind.Marshaller; ... Object requestObject = ... // This is the object that needs to be printed with indentation Marshaller marshaller = ... marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); StringWriter stringWriter = new StringWriter(); marshaller.marshal(requestObject, stringWriter); System.out.println(stringWriter.toString());
package com.namasoft.dms.gui.common.utilities; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.annotation.XmlAccessorOrder; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlID; import javax.xml.bind.annotation.XmlIDREF; import javax.xml.bind.annotation.XmlRootElement; public class JAXB { public static class Human { @XmlID String id; @XmlElement String name; @XmlElement int age; public Human() { } public Human(String name) { this.id = this.name = name; age = new Random().nextInt(); } } @XmlRootElement public static class HumansList { @XmlElementWrapper(name = "humanObjects") @XmlElement(name = "human") List humanObjects = new ArrayList<>(); @XmlIDREF @XmlElementWrapper(name = "humanIds") @XmlElement(name = "id") List humanIds = new ArrayList<>(); void addHuman(Human human) { humanObjects.add(human); humanIds.add(human); } } public static void main(String[] args) throws JAXBException { HumansList list = new HumansList(); Human parent1 = new Human("parent1"); list.addHuman(parent1); Human child11 = new Human("child11"); list.addHuman(child11); Human child12 = new Human("child12"); list.addHuman(child12); Human parent2 = new Human("parent2"); list.addHuman(parent2); Human child21 = new Human("child21"); list.addHuman(child21); Human child22 = new Human("child22"); list.addHuman(child22); JAXBContext context = JAXBContext.newInstance(HumansList.class); Marshaller m = context.createMarshaller(); StringWriter xml = new StringWriter(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); m.marshal(list, xml); System.out.println(xml); } }
输出将是
parent1 parent1 -486071665 child11 child11 920318383 child12 child12 -1355111983 parent2 parent2 -314154051 child21 child21 983544381 child22 child22 748252616 parent1 child11 child12 parent2 child21 child22