Getting dynamic attribute for an element in Jaxb

I have the following XML tag with many attributes. The number / name of the attributes is not specified, because I get XML at runtime, and I just know the tag name. How can I use JAXB to get the whole attribute as 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 are not known at runtime:

 <ScriptList> <script name="xxx" value="sss" id=100 > <script> <script name="xxx" value="sss" id=100 alias="sss"> <script> </ScriptList> 
+4
source share
2 answers

You can do:

 @XmlAnyAttribute private Map<QName, String> attributes; 

Almost Map<String, String> that you wanted.

+5
source

Create 2 ScriptList and Script classes:

 @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 think that's all. At least this could be your starting point.

0
source

Source: https://habr.com/ru/post/1400852/


All Articles