java - JAXB 解码多态对象 - 集合?

标签 java jaxb

我有如下 XML:

<Temp NAME="bobo"> 
    <elem1 />
    <elem2>
        <Attri1 ID="123" />
    </elem2>
    <elem3>
        <Attri2 MOM="9" ID="7" SSS="2" />
    </elem3>
    <elem3>
         <Attri3 MOM="44" ID="4" DSC="First Test"/>
    </elem3>
</Temp>

我正在使用注释映射到 java 类:

@XmlRootElement(name = "Temp")
public class Temp {

    @XmlElements({
        @XmlElement(name="elem1",type=elem.class),
        @XmlElement(name="elem2",type=elem.class)})
    public ArrayList<elem> elms;
}

public class elem {
...
}

public class elem1 extends elem{
...
}

public class elem2 extends elem{
...
}

public class elem3 extends elem{
...
}

在每个元素中可以有很多属性。

有人可以帮我如何正确注释 java 类吗?

让我提出我的问题。 我需要从这个 XML 构建一个具有 3 个参数的 java 对象:第一个元素的名称 (p1)、子元素的名称 (p2)、映射值 (p3)。

上面的XML会生成如下4个java elem对象:

所有 java 对象类型都是 elem!

obj1 :

p1 = elem1
p2 = null
p3 = null

obj2 :

p1 = elem2
p2 = Attri1
p3 =  map:   key   value
             (ID,  123)

obj3 :

p1 = elem3
p2 = Attri2
p3 =  map:   key   value
             (MOM,  9)
             (ID,  7)
             (SSS,  2)

obj4 :

p1 = elem3
p2 = Attri3
p3 =  map:   key   value
             (MOM,  44)
             (ID,  4)
             (DSC,  First Test)

提前致谢! 鲍里斯。

最佳答案

好吧,您需要为您的 xml 定义一个涵盖所有案例的架构定义。如果您确实需要动态结构,则需要使用键值对以不同的方式构建它。例如:

<属性>

<name >ID</name >
<value > 123</value >

< 属性名称="ID"值="123">

这将为您提供每个元素的属性集合。这可以在您的模式中表示。一旦你有了模式,你就可以生成或创建你的对象

关于java - JAXB 解码多态对象 - 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6806660/

相关文章:

java - 我可以将多个处理器的注释放入 Java 类中吗?

java - IllegalAnnotationsException SetMultimap 是一个接口(interface),JAXB 无法处理接口(interface)

java - 咖啡因缓存 "cannot be cast to org.springframework.cache.Cache"

java - 重复值

java - 在Java中执行外部程序——巨大的CPU负载

java - Hadoop:使用作业的输出文件作为第二个作业的输入文件 (FileNotFound)

java - 如何从静态方法打开新窗口 - JavaFX

java - JAXB 内容未实例化

java - 从多个文件复合的模式生成 JAX-B 类

java - jaxb anyelement 命名空间 any 而不是 other