JAXB:將Map 編組為
JAXB 本身支援將Map 編組為XML 結構,例如:
<map> <entry> <key> KEY </key> <value> VALUE </value> </entry> <entry> <key> KEY2 </key> <value> VALUE2 </value> </entry> ... </map>您可能需要一個XML結構,其中鍵是元素名稱,值是其內容:
<map> <key> VALUE </key> <key2> VALUE2 </key2> ... </map>
反對自訂XML 結構的建議
通常不鼓勵使用動態元素名稱產生XML 。 XML 模式 (XSD) 定義介面契約。 JAXB 可以從程式碼產生 XSD,讓您可以根據 XSD 中的預定義結構限制交換的資料。 在預設情況下,Map枚舉密鑰解決方案
要執行嚴格的契約,請考慮使用枚舉類型作為映射鍵而不是字符串:public enum KeyType { KEY, KEY2; } @XmlJavaTypeAdapter(MapAdapter.class) Map<KeyType, String> mapProperty;
JAXB 將產生一個架構,將映射元素限制為使用預先定義鍵KEY 或KEY2 的元素。
預設結構的簡化
如果您喜歡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; } }
以上是如何使用 JAXB 將映射編組為「值」XML 結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!