java - 如何使用 xstream 将 Hashmap 映射到 XML 中的键值属性

标签 java xml map xstream

我有以下实体:

@XStreamAlias("entity")
public class MapTestEntity {

    @XStreamAsAttribute
    public Map<String, String> myMap = new HashMap<>();

    @XStreamAsAttribute
    public String myText;
}

我将它与 xstream 一起使用,例如:

MapTestEntity e = new MapTestEntity();
e.myText = "Foo";
e.myMap.put("firstname", "homer");
e.myMap.put("lastname", "simpson");

XStream xstream = new XStream(new PureJavaReflectionProvider());
xstream.processAnnotations(MapTestEntity.class);
System.out.println(xstream.toXML(e));

并得到以下xml:

<entity myText="Foo">
  <myMap>
    <entry>
      <string>lastname</string>
      <string>simpson</string>
    </entry>
    <entry>
      <string>firstname</string>
      <string>homer</string>
    </entry>
  </myMap>
</entity>

但我需要将 HashMap 映射到 xml 中的属性,例如:

<entity myText="Foo" lastname="simpson" firstname="homer" />

我如何使用 XStream 做到这一点?我可以使用自定义转换器或映射器或类似的东西吗? TIA!!

(当然我的代码需要确保xml属性中没有重复项。)

最佳答案

我写了一个自己的转换器:

public class MapToAttributesConverter implements Converter {

    public MapToAttributesConverter() {
    }

    @Override
    public boolean canConvert(Class type) {
        return Map.class.isAssignableFrom(type);
    }

    @Override
    public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
        Map<String, String> map = (Map<String, String>) source;
        for (Map.Entry<String, String> entry : map.entrySet()) {
            writer.addAttribute(entry.getKey(), entry.getValue().toString());
        }
    }

    @Override
    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
        Map<String, String> map = new HashMap<String, String>();
        for (int i = 0; i < reader.getAttributeCount(); i++) {
            String key = reader.getAttributeName(i);
            String value = reader.getAttribute(key);
            map.put(key, value);
        }
        return map;
    }
}

关于java - 如何使用 xstream 将 Hashmap 映射到 XML 中的键值属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23816525/

相关文章:

java - 如何迭代多个 map

python map函数迭代

java - 修改Dijkstra,需要验证

java - 从两个表中获取多对多关系的记录

java - 使用 schemaLocation 引用位于 jar 中的 XSD?

xml - 使用配置文件创建动态 GUI

java - 多个 Maven 项目,单个 JaCoCo 站点?

java - 如何将请求中的特殊字符发送到 servlet

xml - 将嵌套的 xml 解码为结构

c++ - 创建 STL - 恒等映射的最简单方法是什么?