【发布时间】:2011-02-03 18:09:15
【问题描述】:
我在尝试将嵌套元素映射到同一个 Java 类时遇到问题。
XML
我在这里要做的是将id 属性和text 元素设置为SlideText 类。
<module name="test project">
<slide id="1">
<layout>
<text>hello</text>
</layout>
</slide>
</module>
模块类
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Module {
@XmlAttribute
private String name;
@XmlElements({
@XmlElement(name = "slide", type = SlideText.class)
})
private Slide slide;
}
幻灯片类
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class Slide {
@XmlAttribute
private String id;
}
SlideText 类
我尝试在text 属性上使用@XmlElementWrapper,但我得到一个异常,@XmlElementWrapper 只能应用于集合。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SlideText extends Slide {
// how to map this to layout/text elements?
private String text;
}
有没有办法将<layout><text>hello</text></layout> 映射到SlideText 的text 属性?
谢谢。
更新
为了说明我在这里要完成的工作,幻灯片可以是任何类型,具体取决于使用的布局。 module 知道它是 slide,但它不知道它是什么幻灯片,这就是我有抽象 Slide 类的原因。
基本上,如果可行,我将创建扩展 Slide 的 SlideImage 和 SlideTextVideo。
实际的 XML 文件如下所示:-
<module name="test project">
<slide id="1">
<layout-text>
<text>hello</text>
</layout-text>
</slide>
</module>
<module name="test project">
<slide id="2">
<layout-image>
<image-path>img.jpg</image-path>
</layout-image>
</slide>
</module>
<module name="test project">
<slide id="3">
<layout-text-video>
<text>hello</text>
<video-path>a.mp4</video-path>
</layout-text-video>
</slide>
</module>
【问题讨论】:
-
幻灯片是复杂类型。将其定义为另一个对象并将另一个放入此类。这不适合你吗?
-
@fmucar:我在上面的帖子中添加了更多推理。
-
旁注:除了
Module之外的任何类都不需要@XmlRootElement,假设它始终是XML 文档的根元素。 -
你能得到答案吗?即使我有这样的东西。我知道已经很久了,但你还记得你在这里做了什么吗?