【问题标题】:JAXB Unmarshalling polymorphic objects - collections?JAXB 解组多态对象 - 集合?
【发布时间】:2011-07-24 12:00:58
【问题描述】:

我的 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)

提前致谢! 鲍里斯。

【问题讨论】:

  • 好的,那么当你尝试你拥有的东西时会发生什么?
  • 问题是我现在不知道如何正确处理属性,例如在 elem2 中有属性名称 'attri1' 它也可以是其他一些属性,现在需要属性的名称然后它的价值..每个属性都是不同的对象。

标签: java jaxb


【解决方案1】:

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

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

这将为您提供每个元素的属性集合。这可以在您的架构中表示。获得架构后,您可以生成或创建对象

【讨论】:

  • 我的 xml 没有 chema 定义。我需要使用这个 xml,因为这是我的应用程序需要使用的输入
  • 在这种情况下考虑 DOM 解析器,您可以在内部将它们转换为键/值对,就像您提到的对象一样。对于 JAXB,据我所知,它映射到一个模式。
  • 问题 - 我如何将 p1 (从 xml 生成的 elem java 对象)值设置为第一个元素的名称 - 即 elem1 ?这是我需要使用注释添加到 elem 类的东西。像这样:public class elem { XmlAttribute public String p1; XmlAttribute public String p2;公共地图 p1; }
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
相关资源
最近更新 更多