Java 需要格式化JAXB输出的帮助吗

Java 需要格式化JAXB输出的帮助吗,java,xml,jaxb2,xml-formatting,Java,Xml,Jaxb2,Xml Formatting,我有一些对象,比如说两个,A和B。这些对象来自同一个类。我需要使用JAXB封送这些对象,输出XML的格式如下: <Root> <A> <ID> an id </ID> </A> <B> <ID> an id </ID> </B> </Root> <!-- Then all A and B attribute

我有一些对象,比如说两个,A和B。这些对象来自同一个类。我需要使用JAXB封送这些对象,输出XML的格式如下:

<Root>
    <A>
        <ID> an id </ID>
    </A>
    <B>
        <ID> an id </ID>
    </B>
</Root>

<!-- Then all A and B attributes must be listed !-->
<A>
    <ID> an id </ID>
    <attribute1> value </attribute1>
    <attribute2> value </attribute2>
</A>
<B>
    <ID> an id </ID>
    <attribute1> value </attribute1>
    <attribute2> value </attribute2>
</B>
我们的主要课程是:

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());
    }

}
那么输出将是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<human>
    <age>24</age>
    <name>John</name>
    <nationalID>123456789</nationalID>
</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;
    }
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<human>
    <nationalID>123456789</nationalID>
</human>
<human>
    <nationalID>123456789</nationalID>
    <age>24</age>
    <name>John</name>
</human>
这将帮助我绘制一个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());
输出将是

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<humansList>
    <humanObjects>
        <human>
            <id>parent1</id>
            <name>parent1</name>
            <age>-486071665</age>
        </human>
        <human>
            <id>child11</id>
            <name>child11</name>
            <age>920318383</age>
        </human>
        <human>
            <id>child12</id>
            <name>child12</name>
            <age>-1355111983</age>
        </human>
        <human>
            <id>parent2</id>
            <name>parent2</name>
            <age>-314154051</age>
        </human>
        <human>
            <id>child21</id>
            <name>child21</name>
            <age>983544381</age>
        </human>
        <human>
            <id>child22</id>
            <name>child22</name>
            <age>748252616</age>
        </human>
    </humanObjects>
    <humanIds>
        <id>parent1</id>
        <id>child11</id>
        <id>child12</id>
        <id>parent2</id>
        <id>child21</id>
        <id>child22</id>
    </humanIds>
</humansList>

不幸的是,这不是我需要的,这将生成一个XML,每个节点都包含它的属性。我更新了这个问题,让我更清楚我的错误,对不起。我不认为有一个解决方案可以解决你想用jaxb做什么,因为它对命名太严格了。您打算如何使用xml,也许您可以使用其他解析器生成它,或者在最坏的情况下,您可以创建自己的解析器来完成此任务。我已经尝试创建您期望的内容,但这只能通过额外的标记和/或名称空间来实现。非常感谢您的回复。你能告诉我你用了什么额外的标签吗?我可以使用我需要的任何标签。另外,您认为还有哪些解析器可以帮助我解决这个问题?解决方案不需要严格命名,但它应该只使用这些ID创建一个对象树,并且对象的属性应该在树下,这是唯一重要的事情。祝您好运,先生。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<humansList>
    <humanObjects>
        <human>
            <id>parent1</id>
            <name>parent1</name>
            <age>-486071665</age>
        </human>
        <human>
            <id>child11</id>
            <name>child11</name>
            <age>920318383</age>
        </human>
        <human>
            <id>child12</id>
            <name>child12</name>
            <age>-1355111983</age>
        </human>
        <human>
            <id>parent2</id>
            <name>parent2</name>
            <age>-314154051</age>
        </human>
        <human>
            <id>child21</id>
            <name>child21</name>
            <age>983544381</age>
        </human>
        <human>
            <id>child22</id>
            <name>child22</name>
            <age>748252616</age>
        </human>
    </humanObjects>
    <humanIds>
        <id>parent1</id>
        <id>child11</id>
        <id>child12</id>
        <id>parent2</id>
        <id>child21</id>
        <id>child22</id>
    </humanIds>
</humansList>