2016-06-24 11 views
0

私は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> 

私は同じXML構造を使用して10回の異なるクラスを持っている瞬間。

1つのクラスを使用してXML構造を定義する方法はありますか、要素名を動的に変更する方法はありますか?

答えて

0

は、あなたが以下のように必要とするすべての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> 

次にあなたがXMLを生成するであろうと、このXSDから正規のクラス(POJO)を生成します。 XMLを生成したら、XSLTを使用してすべての空白タグを削除できます(this参照)。