2012-03-11 41 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