使用xstream将键值xml对映射到java映射
我正在尝试将一个xml文件转换为java映射,如下所示。 xml
<Person>
<ID>123</ID>
<Demographics>
<LastName>ABC</LastName>
<FirstName>XYZ</FirstName>
</Demographics>
<Married>YES</Married>
</Person>
XStream代码如下所示:
final XStream xstream = new XStream();
xstream.alias("Person", Map.class);
xstream.alias("Demographics", Map.class);
xstream.registerConverter(new MapEntryConverter());
final Map<String, Object> map2 = (Map<String, Object>) xstream.fromXML(xml);//where xml is above defined string.
自定义MapEntryConverter是:
public class MapEntryConverter implements Converter
{
public boolean canConvert(final Class clazz)
{
return AbstractMap.class.isAssignableFrom(clazz);
}
public void marshal(final Object value, final HierarchicalStreamWriter writer, final MarshallingContext context)
{
final AbstractMap<String, String> map = (AbstractMap<String, String>) value;
for (final Entry<String, String> entry : map.entrySet())
{
writer.startNode(entry.getKey().toString());
writer.setValue(entry.getValue().toString());
writer.endNode();
}
}
public Object unmarshal(final HierarchicalStreamReader reader, final UnmarshallingContext context)
{
final Map<String, String> map = new HashMap<String, String>();
while (reader.hasMoreChildren())
{
reader.moveDown();
map.put(reader.getNodeName(), reader.getValue());
reader.moveUp();
}
return map;
}
}
因此,映射现在只包含ID和键-值对。它不会将人口统计父对象转换为相应的名称-值对
我希望所有的标记名都作为键,它们的值作为映射值
# 1 楼答案
使用
MarshallingContext
上的convertAnother
方法来处理数据的层次结构,例如: