user1205079
user1205079

Reputation: 405

getting Dynamic attribute for element in Jaxb

I have the following XML tag with many attributes. The number/name of the attributes is not given because I am getting the XML in runtime and I just know the name of the tag. How can I use JAXB to get all the attribute as a Map<String, String>?

How can I add this to the following Java code:

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 example: I can have many attributes that aren't known in runtime:

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

Upvotes: 5

Views: 3761

Answers (2)

lexicore
lexicore

Reputation: 43709

You can do:

@XmlAnyAttribute
private Map<QName, String> attributes;

Almost the Map<String, String> that you wanted.

Upvotes: 6

AlexR
AlexR

Reputation: 115388

Create 2 classes ScriptList and Script:

@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.
}

I believe, that's all. At least this can be your starting point.

Upvotes: -1

Related Questions