Java XStream解析xml

1、pom(1.4.18及以上需要处理com.thoughtworks.xstream.security.NoTypePermission.allows问题)

<dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.17</version>
        </dependency>

2、工具类

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class XmlUtils {

    /**
     * XML转对象
     *
     * @param clazz 对象类
     * @param xml   字符串
     * @param <T>   T
     * @return
     */
    public static <T> T parseFromXml(Class<T> clazz, String xml) {
        //创建解析XML对象
        XStream xStream = new XStream(new DomDriver());

        //处理注解
        xStream.processAnnotations(clazz);
        @SuppressWarnings("unchecked")
        //将XML字符串转为bean对象
                T t = (T) xStream.fromXML(xml);
        return t;
    }

    /**
     * 对象转xml
     *
     * @param obj 对象
     * @return
     */
    public static String toXml(Object obj) {
        XStream xStream = new XStream(new DomDriver());
        xStream.processAnnotations(obj.getClass());
        return xStream.toXML(obj);
    }

}

3、demo

3.1、子类

import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;

@Data
@XStreamAlias("user")
public class Xuser {
    @XStreamAlias("user")
    private String user;

    @XStreamAlias("message")
    private String message;
}

3.2、列表类

import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;

import java.util.List;

@Data
@XStreamAlias("root")
public class XList {

    @XStreamAlias("users")
    private List<Xuser> users;

}

3.3、main

public static void main(String[] args) throws Exception {

        String xml = "<root>\n" +
                "<users>\n" +
                "<user>\n" +
                "   <user>zhangsan</user>\n" +
                "   <message>success</message>\n" +
                "</user>\n" +
                "<user>\n" +
                "   <user>lisi</user>\n" +
                "   <message>fail</message>\n" +
                "</user>\n" +
                "</users>\n" +
                "</root>\n";

        XList obj = XmlUtils.parseFromXml(XList.class, xml);
        log.info("{}", obj);

        String s = XmlUtils.toXml(obj);
        log.info("{}", s);
}

3.4、输出结果

XList(users=[Xuser(user=zhangsan, message=success), Xuser(user=lisi, message=fail)])
<root>
  <users>
    <user>
      <user>zhangsan</user>
      <message>success</message>
    </user>
    <user>
      <user>lisi</user>
      <message>fail</message>
    </user>
  </users>
</root>

 

posted @ 2024-02-22 11:58  都是城市惹的祸  阅读(22)  评论(0)    收藏  举报