Reputation: 405
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
Reputation: 43709
You can do:
@XmlAnyAttribute
private Map<QName, String> attributes;
Almost the Map<String, String>
that you wanted.
Upvotes: 6
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