Xstream基本使用

 

Xstream是一个封装了xml与javaObj互转的框架.

下面记录下一些基本用法

注意,转换的时候,是根据字段名称来进行的,与set get方法名无关

1. @XStreamAlias("alias")

用于指定obj对应xml中的元素

<?xml version="1.0" encoding="UTF-8"?>
<aliasDemo>
    <name>666</name>
</aliasDemo>
@XStreamAlias("aliasDemo")
public class AliasDemo {
    private String name;
}

结果如下

AliasDemo(name=666)

2. @XStreamImplicit

用于处理xml中表示数组或者集合的结构.有时会遇到在集合外面是没有一个父元素包着的,但我们在建obj的时候则必须用一个集合装起来.则用这个注解,表示解析集合中的泛型,而集合本身字段不解析

<?xml version="1.0" encoding="UTF-8"?>
<company>
        <user>
            <name>wing</name>
            <age>18</age>
        </user>
        <user>
            <name>Enn</name>
            <age>19</age>
        </user>
    <name>gogo</name>
    <address>天朝</address>
</company>
@ToString
@XStreamAlias("company")
public class Company {
    @XStreamImplicit
    private List<User> userList;
    private String name;
    private String address;
}

//================User===============
@XStreamAlias("user")
public class User {
    private String name;
    private int age;
}

解析的结果如下

Company(userList=[User(name=wing, age=18), User(name=Enn, age=19)], name=gogo, address=天朝)

3. @XStreamAsAttribute

针对于xml中标签有属性,而我们把其属性同样作为该类的一个字段转换

<?xml version="1.0" encoding="UTF-8"?>
<company>
        <user tagId="1">
            <name>wing</name>
            <age>18</age>
        </user>
        <user tagId="2">
            <name>Enn</name>
            <age>19</age>
        </user>
    <name>gogo</name>
    <address>天朝</address>
</company>
@XStreamAlias("user")
public class User {
    @XStreamAsAttribute
    //该范例中用的xstream版本是1.4.3,该版本中注解没有value属性,则字段名需要跟xml中一致
    private String tagId;
    private String name;
    private int age;
}
输出结果
Company(userList=[User(tagIdd=null, name=wing, age=18), User(tagIdd=null, name=Enn, age=19)], name=gogo, address=天朝)

4. 自定义转换器

有时候针对一些比较复杂的xml结构,或者我们想要根据自己的想法来转换bean.可以自定义一个转换器

如下结构的 xml,希望把tagId 转成 bean 中的 num字段, 标签内容转成 content 字段

<converterDemo>
    <num tagId="1">666</num>
</converterDemo>
//指定自定义的转换器
@XStreamConverter(MyConvertor.class)
@XStreamAlias("converterDemo")
public class ConverterDemo {
    private String content;
    private String num;
}

自定转换器, 继承Converter , 并重写其三个方法

import com.thoughtworks.xstream.converters.Converter;
public class MyConvertor implements Converter {

    @Override
    public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
        //TODO xml --> 对象

    }

    @Override
    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
        //xml --> 对象
        reader.moveDown(); //读取的第一个标签是<converterDemo>,需要往下一个
        String num = reader.getAttribute("tagId");  //获取指定属性的值
        String content = reader.getValue();   //获取标签值
        ConverterDemo bean = new ConverterDemo();
        bean.setNum(num);
        bean.setContent(content);
        System.out.println(bean);
        return bean;
    }

    @Override
    public boolean canConvert(Class type) {
        //返回是否可以转换
        return type.equals(ConverterDemo.class);
    }

以上是一些Xstream的基本使用,后面如果用到新的功能会继续补充.

单纯作为日常工作记录,很多细节没有深入研究,日后会完善

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用XStream库实现XML与对象之间的互转可以通过以下步骤完成: 1. 引入XStream库的依赖:在你的项目中引入XStream库的依赖,可以参考我之前提供的Maven和Gradle配置。 2. 定义Java类:创建一个Java类来表示你的对象,并使用XStream提供的注解来指定XML元素和属性与Java类的映射关系。例如: ```java import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("person") public class Person { private String name; private int age; // 省略构造函数、getter和setter方法 // ... } ``` 3. 将对象转换为XML:使用XStream将Java对象转换为XML字符串。示例如下: ```java import com.thoughtworks.xstream.XStream; public class Main { public static void main(String[] args) { // 创建XStream实例 XStream xStream = new XStream(); // 设置类别名,用于与XML元素进行映射 xStream.alias("person", Person.class); // 创建一个Person对象 Person person = new Person(); person.setName("John"); person.setAge(30); // 将Person对象转换为XML字符串 String xml = xStream.toXML(person); // 输出XML字符串 System.out.println(xml); } } ``` 以上代码将输出以下XML字符串: ```xml <person> <name>John</name> <age>30</age> </person> ``` 4. 将XML转换为对象:使用XStream将XML字符串转换回Java对象。示例如下: ```java import com.thoughtworks.xstream.XStream; public class Main { public static void main(String[] args) { // 创建XStream实例 XStream xStream = new XStream(); // 设置类别名,用于与XML元素进行映射 xStream.alias("person", Person.class); // XML字符串 String xml = "<person><name>John</name><age>30</age></person>"; // 将XML转换为Person对象 Person person = (Person) xStream.fromXML(xml); // 输出Person对象的属性 System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } } ``` 以上代码将输出: ``` Name: John Age: 30 ``` 通过以上步骤,你可以使用XStream实现XML与对象之间的互转。你可以根据具体的需求对Java类和XML结构进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值