マップは通常、次のような XML 構造にマーシャリングされます。
<map> <entry> <key>KEY</key> <value>VALUE</value> </entry> <entry> <key>KEY2</key> <value>VALUE2</value> </entry> ... </map>
ただし、場合によっては、キーが要素名になり、値がその内容になります:
<map> <KEY>VALUE</KEY> <KEY2>VALUE2</KEY2> ... </map>
オプション 1: 動的に名前が付けられた XML 要素
動的属性名の使用は推奨されません。これは、XML スキーマとインターフェイス コントラクトの原則に違反します。
オプション 2: 列挙型キー タイプ
厳密なインターフェイス コントラクトを維持するには、マップに列挙型キー タイプを使用します。
public enum KeyType { KEY, KEY2; } @XmlJavaTypeAdapter(MapAdapter.class) Map<KeyType, String> mapProperty;
オプション 3: 簡素化されたマーシャリング
デフォルトのマーシャリング構造を
class MapElements { @XmlAttribute public String key; @XmlAttribute public String value; // Required by JAXB private MapElements() {} public MapElements(String key, String value) { this.key = key; this.value = value; } } class MapAdapter extends XmlAdapter> { @Override public MapElements[] marshal(Map arg0) { MapElements[] mapElements = new MapElements[arg0.size()]; int i = 0; for (Entry entry : arg0.entrySet()) { mapElements[i++] = new MapElements(entry.getKey(), entry.getValue()); } return mapElements; } @Override public Map unmarshal(MapElements[] arg0) { Map r = new TreeMap<>(); for (MapElements mapelement : arg0) { r.put(mapelement.key, mapelement.value); } return r; } } 以上がJAXB を使用してマップを「value」要素にマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。