我正在使用JAXB而且我遇到了问题。
我有一个具有动态数量属性的元素。因此,其等效XML结构的结构将不是静态的。这是所需XML的示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<element>
<property1>value 1</property1>
<property2>value 2</property2>
<property3>value 3</property3>
<propertyn>value n</propertyn>
</element>
为了生成这个,我使用了@XmlAnyElement:
@XmlRootElement(name = "element")
public class Element {
private Map<String, String> properties = new HashMap<String, String>();
@XmlTransient
public Map<String, String> getProperties() {
return properties;
}
public void setProperties(Map<String, String> properties) {
this.properties = properties;
}
@XmlAnyElement
public List<JAXBElement<String>> getElements() {
List<JAXBElement<String>> elements = new ArrayList<JAXBElement<String>>();
for (String property: properties.keySet()) {
JAXBElement<String> jaxbElement = new JAXBElement<String>(new QName(property), String.class, properties.get(property));
elements.add(jaxbElement);
}
return elements;
}
}
这很好用!但是,我正在尝试添加嵌套元素以支持多值属性,因此XML将类似于:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<element>
<property1>value 1</property1>
<property2>value 2</property2>
<property3>value 3</property3>
<property4>
<value>value 4a</value>
<value>value 4b</value>
<value>value 4c</value>
</property4>
<propertyn>value n</propertyn>
</element>
请注意:
属性数量不是静态的。
多值属性的数量不是静态的。
每个多值属性的值数不是静态的。
我的问题是,我怎么能以简单的方式做到这一点? @XmlElementWrapper在我的情况下有用吗?
谢谢!