2012-03-11 16 views
4

私は多くの属性を持つ以下のXMLタグを持っています。ランタイムにXMLを取得しているので、属性の数/名前は指定されていません。タグの名前はわかります。 JAXBを使用してすべての属性をMap<String, String>として取得するにはどうすればよいですか?Jaxbの要素の動的属性を取得します

<ScriptList> 
    <script name="xxx" value="sss" id=100 > 
    <script> 
    <script name="xxx" value="sss" id=100 alias="sss"> 
    <script> 
</ScriptList> 
+0

XMLの例を投稿してください。これは正確にあなたの質問を理解するのに役立ちます。 – AlexR

+0

XMLがメインスレッド – user1205079

+0

に追加されました。その質問は既に何度か尋ねられました。様々なXML構造を持つ場合、唯一の解決策は '@XmlAnyElement'です。 [JAXB要素のすべてのコンテンツを取得する](http://stackoverflow.com/questions/7736678)、[JAXB - XML文字列プロパティを持つオブジェクトをマーシャリングする](http://stackoverflow.com/questions/1958645)を参照してください。 –

答えて

0

:私は実行時には知られていない多くの属性を持つことができます :

import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name = "script ") 
@XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD) 
public class SearchScriptElement 
{ 

    @XmlAttribute(name = "script") 
    private String script = ""; 

    public String getScript() 
    { 
     return name; 
    } 

    public void setScript(String name) 
    { 
     this.name = name; 
    } 
} 

XMLの例:どのように私は次のJavaコードにこれを追加することができます

2クラスを作成するScriptListScript

@XmlType(name = "ScriptList") 
public class ScriptList { 
    private Collection<Script> scripts; 

    @XmlElement(name = "location") 
    public Collection<Script> getSripts() { 
     return scripts; 
    } 
} 

@XmlType(name = "script") 
public class Script { 
    private String name; 
    private String value; 
    private String id; 
    private String alias; 

    @XmlAttribute(name="name") 
    public String getName() { 
     return name; 
    } 
    // add similar getters for value, id, alias. 
    // add setters for all fields. 
} 

私はそれがすべてだと信じています。少なくともこれがあなたの出発点になります。

+0

こんにちは 返信いただきありがとうございます、私はdon't問題は、XMLの要素の属性を知っているので、私は実行時に属性の名前を知る必要はありません取得することができます質問です。 – user1205079

5

あなたは行うことができます。

@XmlAnyAttribute 
private Map<QName, String> attributes; 

あなたが望んでいたほとんどMap<String, String>を。

+0

ありがとうございます;うまく動作しています。 – user1205079

+1

@ user1205079答えを自由に受け入れてください。 :) – lexicore

関連する問題