在Jaxb中获取元素的Dynamic属性

use*_*079 5 java jaxb

我有以下带有许多属性的XML标记.没有给出属性的数量/名称,因为我在运行时获取XML,而我只知道标记的名称.如何使用JAXB将所有属性作为一个Map<String, String>

如何将其添加到以下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;
    }
}
Run Code Online (Sandbox Code Playgroud)

XML示例:我可以拥有许多在运行时未知的属性:

<ScriptList>
    <script name="xxx" value="sss" id=100 >
    <script>
    <script name="xxx" value="sss" id=100 alias="sss">
    <script>
</ScriptList>
Run Code Online (Sandbox Code Playgroud)

lex*_*ore 6

你可以做:

@XmlAnyAttribute
private Map<QName, String> attributes;
Run Code Online (Sandbox Code Playgroud)

几乎Map<String, String>就是你想要的.


Ale*_*exR -1

创建 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.
}
Run Code Online (Sandbox Code Playgroud)

我相信,仅此而已。至少这可以作为您的起点。