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
我正在尝试在解组 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