我正在尝试将如下的 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 和 Married 作为键值对。它没有将 Demographics 父级转换为其相应的名称值对。
我想将所有标签名称作为键,将它们的值作为映射值。