XStream 导入导出带属性 XML

生成和解析如下XML

<resources>
  <string name="name0">text0</string>
  <string name="name1">text1</string>
  <string name="name2">text2</string>
  <string name="name3">text3</string>
  <string name="name4">text4</string>
  <string name="name5">text5</string>
  <string name="name6">text6</string>
  <string name="name7">text7</string>
  <string name="name8">text8</string>
  <string name="name9">text9</string>
</resources>

定义JavaBean

Resources.java

@XStreamAlias("resources")
public class Resources {
    @XStreamImplicit
    public List<Node> resources;

    public Resources(List<Node> resources) {
        this.resources = resources;
    }

    @XStreamAlias("string")
    @XStreamConverter(NodeConverter.class)
    public static class Node {
        @XStreamAsAttribute
        public String name;
        public String text;

        public Node(String name, String text) {
            this.name = name;
            this.text = text;
        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("{");
            sb.append("\"name\":\"")
                    .append(name).append('\"');
            sb.append(",\"text\":\"")
                    .append(text).append('\"');
            sb.append('}');
            return sb.toString();
        }
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("{");
        sb.append("\"resources\":")
                .append(resources);
        sb.append('}');
        return sb.toString();
    }
}

NodeConverter.java

public class NodeConverter implements Converter {

    public static final String ATTRIBUTE_NAME = "name";

    @Override
    public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
        Node node = (Node) source;
        writer.addAttribute("name", node.name);
        writer.setValue(node.text);
    }

    @Override
    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
        String name = reader.getAttribute(ATTRIBUTE_NAME);
        String text = reader.getValue();
        return new Node(name, text);
    }

    @Override
    public boolean canConvert(Class type) {
        return type.equals(Node.class);
    }
}
public static void main(String args[]) throws Exception {
        List<Node> nodes = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            nodes.add(new Node("name" + i, "text" + i));
        }
        Resources resources = new Resources(nodes);

        XStream xStream = new XStream();
        xStream.processAnnotations(Resources.class);
        String xml = xStream.toXML(resources);
        System.out.println(xml);

        Resources resourcesFromXML = (Resources) xStream.fromXML(xml);
        System.out.println(resourcesFromXML);
    }

运行结果:

System.out.println(xml);
<resources>
  <string name="name0">text0</string>
  <string name="name1">text1</string>
  <string name="name2">text2</string>
  <string name="name3">text3</string>
  <string name="name4">text4</string>
  <string name="name5">text5</string>
  <string name="name6">text6</string>
  <string name="name7">text7</string>
  <string name="name8">text8</string>
  <string name="name9">text9</string>
</resources>
System.out.println(resourcesFromXML);
{"resources":[{"name":"name0","text":"text0"}, {"name":"name1","text":"text1"}, {"name":"name2","text":"text2"}, {"name":"name3","text":"text3"}, {"name":"name4","text":"text4"}, {"name":"name5","text":"text5"}, {"name":"name6","text":"text6"}, {"name":"name7","text":"text7"}, {"name":"name8","text":"text8"}, {"name":"name9","text":"text9"}]}
发布了137 篇原创文章 · 获赞 49 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/MAIMIHO/article/details/94440538