2012-03-11 73 views
4

我有以下具有許多屬性的XML標記。沒有給出屬性的數字/名稱,因爲我在運行時獲取XML,並且我只知道標記的名稱。 如何使用JAXB將所有屬性設置爲Map<String, String>在Jaxb中獲取元素的動態屬性

我如何添加這下面的Java代碼:

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例子: 我可以有未在運行時已知的許多屬性:

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

請發佈您的XML示例。這將有助於準確理解你的問題。 – AlexR 2012-03-11 15:59:14

+0

將XML添加到主線程 – user1205079 2012-03-11 16:03:47

+0

這個問題已經被多次提出。如果你有不同的XML結構,唯一的解決方案是'@ XmlAnyElement'。請參閱[JAXB獲取元素的所有內容](http://stackoverflow.com/questions/7736678),[JAXB - 具有XML字符串屬性的編組對象](http://stackoverflow.com/questions/1958645)。 – 2012-03-11 18:20:22

回答

0

創建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

嗨 感謝您的回覆,我不知道編碼過程中xml元素的屬性,所以我問我是否可以在運行時得到它,而不需要知道屬性的名稱。 – user1205079 2012-03-11 16:18:41

5

你可以這樣做:

@XmlAnyAttribute 
private Map<QName, String> attributes; 

幾乎Map<String, String>,你想要的。

+0

非常感謝,工作正常。 – user1205079 2012-03-12 08:37:21

+1

@ user1205079然後隨時接受答案。 :) – lexicore 2012-03-12 09:14:42