动态XML元素名称在同一结构中

时间:2016-06-24 09:29:15

标签: java xml

假设我有以下用于建模XML输出的类:

import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "dataObj")
public class DataObj implements Serializable{

    private static final long serialVersionUID = 1L;
    private String value;

    public DataObj(){}
    public DataObj(String v){
        this.value = v;
    }

    public String getValue(){
        return this.value;
    }

    @XmlElement
    public void setValue(String v){
        this.value = v;
    }
}

这将生成以下XML文件:

<dataObj>
    <value>
        Some Value
    </value>
</dataObj>

这很棒,但是,我的API有许多不同的XML输出,都遵循上面的XML结构,但具有不同的元素名称。

例如:

<person>
    <name>
        John Doe
    </name>
</person>

<car>
    <color>
        Sky Blue
    </color>
</car>

目前我有10个不同的类使用相同的XML结构。

有没有办法使用一个类来定义XML结构,但是动态地更改元素名称?

1 个答案:

答案 0 :(得分:0)

定义一个XSD,其中包含您需要的所有XML标记,如下所示:

<xsd:complexType name="YourClass">
    <xsd:sequence>
        <xsd:element name="person">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="name" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="car">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="color" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
    ............. and so on
</xsd:complexType>

然后从此XSD生成规范类(POJO),您将使用该类生成XML。 生成XML后,您可以使用XSLT删除所有空白标记(请参阅this)。