简体   繁体   English

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

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

For instance I have two user accounts: a sender and recipient. 例如,我有两个用户帐户:发件人和收件人。 Each of them has its own login and password to be used. 他们每个人都有自己的登录名和密码来使用。 And these fields are kept in xml config files like this: 这些字段保存在xml配置文件中,如下所示:

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

In my tests I created Account class and I want to put there either sender or recipient data: 在测试中,我创建了Account类,并希望在其中放置发件人或收件人数据:

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

I load required data from xml using com.thoughtworks.xstream @XStream and its alias, annotating the class with @XStreamAlias("SenderData") annotation. 我使用com.thoughtworks.xstream @XStream及其别名从xml加载所需的数据,并使用@XStreamAlias("SenderData")注释对类进行注释。

It works perfectly for one specific xml source file, but if I have several xml sources (sender and recipient here) how can I load appropriate data using @XStream? 它非常适合一个特定的xml源文件,但是如果我有多个xml源(这里是发送者和接收者),如何使用@XStream加载适当的数据? To be clear, my goal is to have two objects of one Account class, something like this: 明确地说,我的目标是拥有一个Account类的两个对象,如下所示:

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

- the last will not work as I can put only one @XStreamAlias("SenderData") annotation to Account class -最后一个将不起作用,因为我只能在Account类中放置一个@XStreamAlias("SenderData")批注

Assuming you have to load thoses XML, and using xstream-distribution-1.4.9 假设您必须加载这些XML,并使用xstream-distribution-1.4.9

1.first xml (recipient.xml) 1.第一个xml(recipient.xml)

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

2. second XML (sender.xml) 2.第二个XML(sender.xml)

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

With this Account 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());
    }
}

and test 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();


    }
}

its works. 其作品。 like this result 喜欢这个结果

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

Look at you code to see if you didn't forget something 查看您的代码,看看是否没有忘记什么

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM