利用XStream包,XML与Java对象的转换十分方便,使用 xStream.fromXML() 和 xStream.toXML()方法即可。
这里对复杂XML与JavaBean的转换问题进行记录:
首先,是复杂XML的格式,如下:
<Parameters>
<InImg type="string" describe="待分类tif文件路径1">MSS1.tiff</InImg>
<AOItxtPath type="string" describe="txt样本路径">.\data\wuhan_sample.txt</AOItxtPath>
<DistanceKind type="string" describe="距离种类">绝对距离</DistanceKind>
</Parameters>
XML存在既存在属性(type="string" describe="txt样本路径"),又有值的情况,示例截图更清晰:
进行这类XML与Java实体类的转换,主要用到了@XStreamConverter 注解
首先,来看实体类代码(这里仅截取了 <Parameters> 部分的代码),这里用到了自带的Converter:
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Parameters{
@XStreamAlias("InImg")
private InImg inImg;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@XStreamConverter(value = ToAttributedValueConverter.class,strings = {"imgName"})
public static class InImg{
@XStreamAsAttribute
private String type = "string";
@XStreamAsAttribute
private String describe = "待分类tif文件路径";
//@XStreamOmitField
private String imgName = "33333";
}
当然,也可以使用自定义的Converter,不过由于使用自带的Converter已经满足了我的需求,所以不再自定义了。
下面是XML转换Java实体类的代码:
Class_minXML.Alg ca = new Class_minXML.Alg();
Class_minXML.InImg ci = new Class_minXML.InImg();
ci.setImgName("测试文件");
Class_minXML.Parameters cp = new Class_minXML.Parameters(ci);
Class_minXML class_minXML = new Class_minXML(ca,cp);
boolean flag = XmlUtils.bean2xml(class_minXML,"C:\\Users\\zhangzhe\\Desktop\\test2.xml");
输出结果:
转换成功!