XML和对象的转换

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.security.AnyTypePermission;
import com.wyk.entity.User;

public class XmlTest {
    public static void main(String[] args) {
        User user = new User();
        user.setName("张三");
        user.setAge(18);
        user.setAddress("北京市海淀区");

        System.out.println("===================对象转换为XML===================");
        XStream xstream = new XStream();
        xstream.alias("User", User.class);
        String xml = xstream.toXML(user);
        System.out.println(xml);

        System.out.println("===================XML转换为对象===================");
        // 这表示告诉XStream处理MedicalCardTopUpLogHisRsp类中的注解。
        xstream.processAnnotations(User.class);
        // 这里添加了一个权限,允许XStream处理任何类型的数据。
        xstream.addPermission(AnyTypePermission.ANY);
        User userXml = (User) xstream.fromXML(xml);
        System.out.println(userXml);
    }
}

注意XML转换为对象,名字与类名或者属性名不一致,可以使用注解并在括号内注明别名。
例如在处理下面字符串时的情况(根标签为 Response,name 标签为 NAME)

String xmlString = 
    "<Response>\n" +
    "  <NAME>张三</NAME>\n" +
    "  <age>18</age>\n" +
    "  <address>北京市海淀区</address>\n" +
    "</Response>";

// ======================
// 此时要将User类设置如下情况

@XStreamAlias("Response") // xml的根目录名
public class User {
    @XStreamAlias("NAME") //xml的标签名
    private String name;
    
    private Integer age;
    
    @XStreamOmitField // 设置此注解,xml转化为对象时会忽略该属性,结果为null
    private String address;

    @XStreamImplicit // 如果有 List 的情况下,在 List 属性上添加注解,子类中也可以添加上述注解
    // @XStreamImplicit(itemFieldName="items")
    private List<Child> items;
}

@XStreamImplicit@XStreamImplicit(itemFieldName="items") 的区别
当 xml 标签中有外部的标签<items></items>包裹时,需要忽略 items 时使用第二个数据,不需要时使用第一个
例如下面这个 xml 的部分,我们只需要一个 items 作为集合名时就要用 @XStreamImplicit(itemFieldName="items") 忽略多余的 items

    <items>
        <name>王二</name>
        <age>15</age>
    </items>
    <items>
        <name>李四</name>
        <age>16</age>
    </items>
    <items>
        <name>张三</name>
        <age>17</age>
    </items>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值