gpt4 book ai didi

java - 使用 JAXB 从 MAP 创建 XML

转载 作者:太空宇宙 更新时间:2023-11-04 11:50:20 25 4
gpt4 key购买 nike

我想从 Java.util.Map 创建 XML我将值放入该映射中并尝试创建 XML,其中根元素将是可配置的,并且将从该映射创建子元素。

 Map mp = new HashMap(); 

mp.put("key","shaon"):

mp.put("newKey","newValue");

XML 将如下所示:

<shaonsXML>
<key>shaon</key>
<newKey> newValue </newKey>
</shaonsXML>

我见过使用 JAXB 的示例,但这些示例不会像我尝试生成的那样创建 XML 标记。

任何人都可以给我一些链接或建议吗?提前致谢!

我已遵循这些建议:thisthis

但是它生成了这个 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<mapProperty>
<item>
<key>KEY1</key>
<value>SHAON</value>
</item>
<item>
<key>newKEY</key>
<value>newValue</value>
</item>
</mapProperty>
</root>

最佳答案

我做到了!使用过this示例

从上面的帖子:创建了这个类:

    public class MapAdapter extends XmlAdapter<MapWrapper, Map<String, String>>{

@Override
public Map<String, String> unmarshal(MapWrapper v) throws Exception {
Map<String, String> map = new HashMap<String,String>();//v.toMap();

return map;
}

@Override
public MapWrapper marshal(Map<String, String> m) throws Exception {
MapWrapper wrapper = new MapWrapper();

for(Map.Entry<String, String> entry : m.entrySet()){
wrapper.addEntry(new JAXBElement<String>(new QName(entry.getKey()), String.class, entry.getValue()));
}

return wrapper;
}

}

MapWrapper 类:

@XmlType
public class MapWrapper{
private List<JAXBElement<String>> properties = new ArrayList<>();

public MapWrapper(){

}

@XmlAnyElement
public List<JAXBElement<String>> getProperties() {
return properties;
}
public void setProperties(List<JAXBElement<String>> properties) {
this.properties = properties;
}
public void addEntry(JAXBElement<String> prop){
properties.add(prop);
}

public void addEntry(String key, String value){
JAXBElement<String> prop = new JAXBElement<String>(new QName(key), String.class, value);
addEntry(prop);
}

}

创建了此自定义 map

@XmlRootElement(name="RootTag")
public class CustomMap extends MapWrapper{
public CustomMap(){

}
}

通过创建 XML 来测试代码:

private static void writeAsXml(Object o, Writer writer) throws Exception
{
JAXBContext jaxb = JAXBContext.newInstance(o.getClass());

Marshaller xmlConverter = jaxb.createMarshaller();
xmlConverter.setProperty("jaxb.formatted.output", true);
xmlConverter.marshal(o, writer);
}


CustomMap map = new CustomMap();
map.addEntry("Key1","Value1");
map.addEntry("Key2","Value2");
map.addEntry("Key3","Value3");
map.addEntry("Key4","Value4");
writeAsXml(map, new PrintWriter(System.out));

并生成 XML:

<RootTag>
<Key1>Value1</Key1>
<Key2>Value2</Key2>
<Key3>Value3</Key3>
<Key4>Value4</Key4>
</RootTag>

我只需要编码,因此没有实现 Unmarshal 部分。

关于java - 使用 JAXB 从 MAP 创建 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com