XStream实现XML转换成JavaBean

185 阅读1分钟
XML文件(TPA_library.xml)
<pis_project baseline_description="TPA Library List" baseline_version="0102" creation_date="Fri Sep 01 17:08:26 2022"
             name="JRL J151 CCT">
    <pre_recorded_message>
        <tpa_message index="1" type="TPA Library" database_id="PreDefID_xx" description="" targets="" name="" ddu_id=""
                     mode="single" concurrent="none">
            <multilingual_string name="title">
                <ml_entry lang="en_SG" val="Detrainment"/>
                <ml_entry lang="zh_SG" val=""/>
                <ml_entry lang="ms_MY" val=""/>
                <ml_entry lang="ta_IN" val=""/>
            </multilingual_string>
            <multilingual_string name="message">
                <ml_entry lang="en_SG"
                          val="Due to a train fault, this train service ends here. Please alight and board the next train. We apologise for the inconvenience."/>
                <ml_entry lang="zh_SG" val=""/>
                <ml_entry lang="ms_MY" val=""/>
                <ml_entry lang="ta_IN" val=""/>
            </multilingual_string>
        </tpa_message>
    </pre_recorded_message>
</pis_project>

引入依赖
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.20</version>
</dependency>

<dependency>
    <groupId>xmlpull</groupId>
    <artifactId>xmlpull</artifactId>
    <version>1.1.3.1</version>
</dependency>
<dependency>
    <groupId>xpp3</groupId>
    <artifactId>xpp3_min</artifactId>
    <version>1.1.4c</version>
</dependency>
创建实体类
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@XStreamAlias("pis_project")
public class PisProject {

    @XStreamAlias("baseline_description")
    @XStreamAsAttribute
    private String filed1;

    @XStreamAlias("baseline_version")
    @XStreamAsAttribute
    private String filed2;

    @XStreamAlias("creation_date")
    @XStreamAsAttribute
    private String filed3;

    @XStreamAlias("name")
    @XStreamAsAttribute
    private String filed4;

    @XStreamAlias("pre_recorded_message")
    private List<PreRecordedMessage> preRecordedMessageList = new ArrayList<>();

}
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@XStreamAlias("tpa_message")
public class PreRecordedMessage {


    @XStreamAlias("index")
    @XStreamAsAttribute
    private String filed1;

    @XStreamAlias("type")
    @XStreamAsAttribute
    private String filed2;

    @XStreamAlias("database_id")
    @XStreamAsAttribute
    private String filed3;

    @XStreamAlias("description")
    @XStreamAsAttribute
    private String filed4;

    @XStreamAlias("targets")
    @XStreamAsAttribute
    private String filed5;

    @XStreamAlias("name")
    @XStreamAsAttribute
    private String filed6;

    @XStreamAlias("ddu_id")
    @XStreamAsAttribute
    private String filed7;

    @XStreamAlias("mode")
    @XStreamAsAttribute
    private String filed8;

    @XStreamAlias("concurrent")
    @XStreamAsAttribute
    private String filed9;

    @XStreamImplicit
    private List<MultilingualString> multilingualStringList = new ArrayList<>();
}
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@XStreamAlias("multilingual_string")
public class MultilingualString {


    @XStreamAlias("name")
    @XStreamAsAttribute
    private String filed1;

    @XStreamImplicit
    private List<MlEntry> mlEntryList;
}
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@XStreamAlias("ml_entry")
public class MlEntry {


    @XStreamAlias("lang")
    @XStreamAsAttribute
    private String filed1;

    @XStreamAlias("val")
    @XStreamAsAttribute
    private String filed2;

}
创建测试类
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.naming.NoNameCoder;
import com.thoughtworks.xstream.io.xml.Xpp3Driver;
import com.thoughtworks.xstream.security.AnyTypePermission;
import java.io.File;

public class TestXStream {

    public static void main(String[] args) throws Exception {
        XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
        xStream.addPermission(AnyTypePermission.ANY);
        xStream.processAnnotations(PisProject.class);
        PisProject pisProject = (PisProject)xStream
                .fromXML(new File("TPA_library.xml"));
        for (MlEntry mlEntry : pisProject.getPreRecordedMessageList().get(0).getMultilingualStringList().get(0).getMlEntryList()) {
            System.err.println(mlEntry);
        }
        System.out.println("Object loaded by xstream: ");
    }
}