我正在尝试将对象编组为XML,该对象扩展了HashMap<String, List<String>>
。但是,对于输出为何不包含在此对象中输入的数据的原因,我仍然不清楚。问题的结尾附近可以找到用于将该对象编组为XML的方法。
数据结构:
@XmlRootElement
class WhatIWant extends HashMap<String, List<String>> {
}
使用以下方式填充
:WhatIWant what = new WhatIWant();
what.put("theKey", Arrays.asList("value1", "value2"));
结果输出如下,找不到输入的数据。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<whatIWant/>
类似的事情确实可行,这正是我期望第一个示例的输出看起来类似的东西。
数据结构:
@XmlRootElement
class MyHashmap {
public HashMap<String, MyList> map = new HashMap<>();
}
class MyList {
public List<String> list = new ArrayList<String>();
}
填充使用:
MyHashmap requirement = new MyHashmap();
MyList t = new MyList();
t.list = Arrays.asList("value1", "value2");
requirement.map.put("theKey", t);
结果输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myHashmap>
<map>
<entry>
<key>theKey</key>
<value>
<list>value1</list>
<list>value2</list>
</value>
</entry>
</map>
</myHashmap>
我用来将对象转换为XML的方法:
public static String getObjectAsXML(Object obj) {
try {
// Create marshaller
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Marshall the object
StringWriter sw = new StringWriter();
marshaller.marshal(obj, sw);
return sw.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Example 1
不能生成与Example 2
中的输出类似的输出?为什么根本不产生任何东西? Example 1
之类的结构获取XML输出?还是不可能?答案 0 :(得分:1)
原因可能是由于以下原因: 要编组/解组的元素必须是公共的,或具有XMLElement批注。
在您的第一个示例中,根类没有公共元素,而第二个类却没有公共元素。您可以尝试(在第一个示例中)添加一个公共吸气剂,以返回地图条目(并将适当的@XmlAccessorType添加到WhatIWant类中),看看它是否给出了预期的结果