2012-03-05 17 views
0

最初。悪い英語で申し訳ありません。
私はそのように与えられたXSDによるXMLへの地図の一部の「一般的な」変換を作りたい:地図のJavaマップからXSD経由のXML

  • キーはXMLでXMLに
  • タグ名を名前をタグ付けするために等しくなりますしません
  • マップの値には、たとえば、ノード内に反復可能なタグを表すマップのリストを含めることができます。
  • xmlにはxsdを付ける必要があります。
  • など

だから私はそれを実現するための有能な方法を探しています。
似たような仕事をしてくれて助けてくれる人はいますか? アドバイスをいただければ幸いです。前もって感謝します!

P.S.例。

Map: 
"fname" : "Asdf" 
"lname" : "Fdsa" 
"cars" : "car" {"car1", "car2", "car3"} 

XML:  
<fname>Asdf</fname> 
<lname>Fdsa</lname> 
<cars> 
    <car>car1</car> 
    <car>car2</car> 
    <car>car3</car> 
</cars> 
+0

はあなたが使用したいXMLの例を書いてもらえますか?これはあなたの要求を正確に理解するのに役立ちます。 – AlexR

+0

に簡単な例が追加されました。作成されたXMLファイルは、一部のWebサービス(_service)のデータソースとして使用されます。 _serviceはテンプレート名とXMLデータソースを取得し、ドキュメントを返します。各テンプレートには独自のスキーマがあります。どのように私はそれらの要件を実装することができますか? – A7iz

答えて

1

まず、単一のルート要素が必要です。これはXML構文の要件です。 JAXBを使用できるようになりました。あなたのクラスのデータを定義します。

JAXBContext ctx = JAXBContext.newInstance("com.yourpackage"); 
Marshaller m = ctx.createMarshaller(); 
m.marshal(data, System.out); 

をそして、あなたはあなたのデータは上のXMLとしてシリアル化表示されます。

@XmlType 
public class Data { 
    private String fname; 
    private String lname; 
    private Collection<String> cars; 

    // getters 
    public String getFname() { 
     return fname; 
    } 
    public String getLname() { 
     return lname; 
    } 
    @XmlElementWrapper(name = "cars") 
    @XmlElement(name = "car") 
    public String getCars() { 
     return cars; 
    } 


    // setters..... 
} 

は、今すぐあなたのデータを記入してから呼び出すために、すべてのセッターを呼び出して、このクラスのインスタンスのインスタンスを作成することができますSTDOUT。

バックXMLを解析するためには言う:

JAXBContext ctx = JAXBContext.newInstance("com.panpwr.api.model.deployment"); 
Unmarshaller unmarshaller = ctx.createUnmarshaller(); 
Data data = (Data)unmarshaller.unmarshal(in); // in is the input stream for XML 
// now your instance of data is populated from XML 
+0

ありがとうございました!しかし、ツリーの深さやノード名が異なる独自のスキーマを使用するいくつかのテンプレートがあればどうでしょうか?また、新しいテンプレートごとに、XSDを作成してapprpriate属性を持つMapを作成するだけでXMLに変換します。 .. – A7iz

+0

各スキーマに複数の注釈付きデータクラスを作成するか、代わりにXMLベースのマッピングを使用できます。私は個人的に注釈付きのクラスを好む。しかしこれまで、私はDigesterとXMLベースのマッピングを使用しました。 – AlexR

+0

ありがとう、アレックス!私はあなたが提案するようにしようとします! – A7iz

関連する問題