Heim > Java > javaLernprogramm > Wie kann ich eine Karte mit JAXB in eine „Wert'-XML-Struktur umwandeln?

Wie kann ich eine Karte mit JAXB in eine „Wert'-XML-Struktur umwandeln?

Mary-Kate Olsen
Freigeben: 2024-11-18 02:48:02
Original
914 Leute haben es durchsucht

How to Marshall a Map into `value` XML Structure with JAXB?

JAXB: Marshalling Map in value

Während JAXB nativ das Marshalling einer Map in XML-Strukturen unterstützt wie:

<map>
  <entry>
    <key> KEY </key>
    <value> VALUE </value>
  </entry>
  <entry>
    <key> KEY2 </key>
    <value> VALUE2 </value>
  </entry>
  ...
</map>
Nach dem Login kopieren

Möglicherweise benötigen Sie eine XML-Struktur, bei der der Schlüssel der Elementname und der Wert sein Inhalt ist:

<map>
  <key> VALUE </key>
  <key2> VALUE2 </key2>
 ...
</map>
Nach dem Login kopieren

Empfehlung gegen benutzerdefinierte XML-Strukturen

Vom Generieren von XML mit dynamischen Elementnamen wird generell abgeraten. XML-Schemas (XSDs) definieren Schnittstellenverträge. JAXB kann XSDs aus Code generieren, sodass Sie die ausgetauschten Daten gemäß vordefinierten Strukturen in XSDs einschränken können.

Im Standardfall wird ein Map generiert eine XSD, die Kartenelemente darauf beschränkt, xs:string-Schlüssel und -Werte zu enthalten. Dies stellt einen klaren Schnittstellenvertrag sicher.

Ihr Ansatz würde eine XSD generieren, die angibt, dass die Karte Elemente mit unbekannten Typen enthält, was gegen gute Praktiken verstößt.

Enum Key Solution

Um einen strengen Vertrag durchzusetzen, sollten Sie die Verwendung eines Aufzählungstyps als Kartenschlüssel anstelle eines Strings in Betracht ziehen:

public enum KeyType {
    KEY, KEY2;
}

@XmlJavaTypeAdapter(MapAdapter.class)
Map<KeyType, String> mapProperty;
Nach dem Login kopieren

JAXB generiert ein Schema, das Kartenelemente auf Elemente beschränkt, die die vordefinierten Schlüssel KEY oder verwenden SCHLÜSSEL2.

Vereinfachung der Standardstruktur

Wenn Sie die einfachere XML-Struktur von Elemente können Sie einen MapAdapter verwenden, der die Map in ein Array von MapElements konvertiert:

class MapElements {
    @XmlAttribute public String key;
    @XmlAttribute public String value;
}

class MapAdapter extends XmlAdapter<MapElements[], Map<String, String>> {
    public MapElements[] marshal(Map<String, String> arg0) {
        MapElements[] mapElements = new MapElements[arg0.size()];
        int i = 0;
        for (var entry : arg0.entrySet())
            mapElements[i++] = new MapElements(entry.getKey(), entry.getValue());
        return mapElements;
    }
    public Map<String, String> unmarshal(MapElements[] arg0) {
        Map<String, String> r = new TreeMap<>();
        for (MapElements mapelement : arg0)
            r.put(mapelement.key, mapelement.value);
        return r;
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich eine Karte mit JAXB in eine „Wert'-XML-Struktur umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage