【发布时间】:2017-09-27 08:45:13
【问题描述】:
我有一个根 Xml document (name = "Entity"),其中包含一个已知 Xml element (name = "Header") 和另一个未知名称的 Xml 元素,但已知它有一个内部 XmlElement(name="label")
以下是可能的 Xml:
<Entity>
<Header>this is a header</Header>
<a>
<label>this is element A</label>
<otherElements/>
</a>
</Entity>
<Entity>
<Header>this is a different header</Header>
<b>
<label>this is some other element of name b</label>
<others/>
</b>
</Entity>
这是我的 JAXB 注释类:
@XmlRootElement(name = "Entity")
@XmlAccessorType(XmlAccessType.NONE)
public class Entity {
@XmlElement(name = "Header")
private Header header;
@XmlElements( {
@XmlElement(name = "a", type=LabelledElement.A.class),
@XmlElement(name = "b", type=LabelledElement.B.class)
} )
private LabelledElement labelledElement;
// constructors, getters, setters...
}
@XmlAccessorType(XmlAccessType.NONE)
public abstract class LabelledElement {
@XmlElement
private String label;
@XmlAnyElement
private List<Element> otherElements;
public static class A extends LabelledElement {}
public static class B extends LabelledElement {}
}
效果很好!但后来我注意到它不仅是<a> 和<b>
可能是<c>、<asd> 甚至是<anything>...
所以列出XmlElement(name = "xyz", type = LabelledElement.xyz.class) 显然不是正确的解决方案。
我只关心Entity#getLabelledElement()#getLabel(),不管LabelledElement 的名字是什么。
这甚至可以通过 JAXB 实现吗?
【问题讨论】:
-
在
unmarshalling期间,我也遇到了类似的问题。我正在尝试将unmarshal未知元素添加到Map<String,Object>中,但它没有按预期工作。我在下面提供的链接中发布了完整的问题。如果你有机会可以看看它并提供你的建议:stackoverflow.com/questions/67648941/…