【问题标题】:Dynamic XML Element Names in the same Structure相同结构中的动态 XML 元素名称
【发布时间】:2016-06-24 09:29:14
【问题描述】:

假设我有以下用于建模 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 结构,但动态更改元素名称?

【问题讨论】:

    标签: java xml


    【解决方案1】:

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

    <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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多