需要帮助格式化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