JAXB 设置自上而下解组

JAX-B set top down unmarhalling

我正在尝试在解组 XML 源期间优化我的代码。 我有这个 xml:

<Parent name="X">
    <List>
        <Element name="A">
        <Element name="B">
        <Element name="C">
    </List>
</Parent>
<Parent name="Y">
    <List>
        <Element name="A">
        <Element name="B">
        <Element name="C">
    </List>
</Parent>

我想在元素中使用父项的名称值,因为如果父项的名称为 X,则元素名称将为 X+element.getName(),否则将为 Y+element.getName( ). 我要做的是在解组过程中,在 Element bean 的 setName(String name) 方法中设置正确的值。这是因为我不想在解组后循环访问 Parents 和 Elements。 问题是 JAX-B 解组方法是自下而上的:它在创建对象 Parent 之前创建对象 Element,所以我不知道如何获取父属性名称。 有没有办法改变这种行为?

您可以 create a method void afterUnmarshal(Unmarshaller, Object parent) 将在解组后调用。在此方法中,您可以根据需要更改对象的 name 属性。

您可能还想用 @XmlElementWrapper(name="List") 注释 elements 属性 以使 Element 对象成为 Parent 对象的直接子对象。

ps。这个答案几乎 1:1 与以下问题的答案:

JAXB / XJC parent-child-parent navigation