получить динамический атрибут для элемента в Jaxb - PullRequest
5 голосов
/ 11 марта 2012

У меня есть следующий тег 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;
    }
}

Пример XML: У меня может быть много атрибутов, которые не известны во время выполнения:

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

Ответы [ 2 ]

6 голосов
/ 12 марта 2012

Вы можете сделать:

@XmlAnyAttribute
private Map<QName, String> attributes;

Почти Map<String, String>, который вы хотели.

0 голосов
/ 11 марта 2012

Создать 2 класса ScriptList и 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.
}

Полагаю, вот и все.По крайней мере, это может быть вашей отправной точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...