将嵌套元素添加到@XmlAnyElement

时间:2014-03-19 20:01:40

标签: java xml jaxb

我正在使用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>

请注意:

  1. 属性数量不是静态的。

  2. 多值属性的数量不是静态的。

  3. 每个多值属性的值数不是静态的。

  4. 我的问题是,我怎么能以简单的方式做到这一点? @XmlElementWrapper在我的情况下有用吗?

    谢谢!

0 个答案:

没有答案