是否可以使用 XStream 将来自不同 xml 文件的数据加载到一个 Java class 中?

Is it possible to load data from different xml files into one Java class using XStream?

例如我有两个用户帐户:发件人和收件人。他们每个人都有自己的登录名和密码。这些字段保存在 xml 配置文件中,如下所示:

<SenderData>
    <login>awesomeLogin</login>
    <password>awesomePass</password>
</SenderData>

在我的测试中,我创建了帐户 class,我想将发件人或收件人数据放在那里:

@XStreamAlias("SenderData")
public class Account {
    private String login, password;
}

我使用 com.thoughtworks.xstream @XStream 及其别名从 xml 加载所需数据,并使用 @XStreamAlias("SenderData") 注释对 class 进行注释。

它非常适用于一个特定的 xml 源文件,但是如果我有多个 xml 源(这里是发件人和收件人),我如何使用 @XStream 加载适当的数据? 明确地说,我的目标是让一个帐户有两个对象 class,像这样:

Account sender = myXstream.load("SenderData", Account.class); //works!
Account recipient = myXstream.load("RecipientData", Account.class);//doesn't work

- 最后一个将不起作用,因为我只能将一个 @XStreamAlias("SenderData") 注释添加到帐户 class

假设您必须加载这些 XML,并使用 xstream-distribution-1.4.9

1.first xml (recipient.xml)

<RecipientData>
    <login>naLogin</login>
    <password>anaPass</password>
</RecipientData>

2。第二个 XML (sender.xml)

<SenderData>
    <login>awesomeLogin</login>
    <password>awesomePass</password>
</SenderData>

使用此帐户 class :

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("SenderData")
public class Account {
    private String login, password;

    public String getLogin() {
        return login;
    }

    /*public void setLogin(String login) {
        this.login = login;
    }*/

    public String getPassword() {
        return password;
    }

    /*public void setPassword(String password) {
        this.password = password;
    }*/


    public void toPtring(){
        System.out.println("login="+this.getLogin());
        System.out.println("pass="+this.getPassword());
    }
}

并测试 class :

public class maintest {


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

        XStream xstream = new XStream(); 
        xstream.alias("SenderData", Account.class);
        FileReader r = new FileReader("sender.xml");
        Account sender=(Account)xstream.fromXML(r);     
        sender.toPtring();


        xstream.alias("RecipientData", Account.class);
        FileReader r2 = new FileReader("recipient.xml");
        Account recipient=(Account)xstream.fromXML(r2);
        recipient.toPtring();


    }
}

它的作品。喜欢这个结果

login=awesomeLogin
pass=awesomePass
login=naLogin
pass=anaPass

看看你的代码,看看你有没有忘记什么