2014-04-22 89 views
0

我有一個xml。我想轉換爲對象,xstream很好地轉換所有標記,除了其中一個標記以外,它將給出null。XStream不轉換xml標籤

有關這個問題的任何想法?

XML

<person> 
    <name>nnn</name> 
    <age>aaa</age> 
    <address> 
    <city>ccc</city> 
    <countryco</country> 
    </address> 
    </person> 

JAVA代碼

XStream _xstream = new XStream(); 
    _xstream.setMode(XStream.NO_REFERENCES); 
    _xstream.aliasType("person", PersonType.class); 
    _xstream.aliasType("address", PersonType.class); 
    _xstream.aliasField("city", AddressType.class, "city"); 
    _xstream.aliasField("country", AddressType.class, "country"); 

當我檢查對象的人,所有的變量都OK,但地址總是null

我想這:

_xstream.aliasType("person", PersonType.class); 
_xstream.aliasType("address", AddressType.class); 
_xstream.aliasField("city", AddressType.class, "city"); 
_xstream.aliasField("country", AddressType.class, "country"); 

但仍然不起作用!

回答

0

在這種情況下,別名的使用是多餘的。 XStream將自動轉換字段的名稱。

無論你有多ADRESS似乎是一個嵌套類型。您正在使用相同類型的兩個別名:

_xstream.aliasType("person", PersonType.class); 
_xstream.aliasType("address", PersonType.class); 

應該

_xstream.aliasType("address", AddressType.class); 

爲ADRESS別名。

+0

也不工作 – user3017959

+0

請編輯您的問題,並告訴我涉及的類AdressType和PersonType – Marcinek

0

Java代碼:

@XStreamAlias("person") 
public class Person { 

@XStreamAlias("name") 
private String Name; 

@XStreamAlias("age") 
private long Age; 

@XStreamImplicit(itemFieldName = "address") 
private List addresses = new ArrayList(); 
} 

@XStreamAlias("adress") 
public class Address{ 

@XStreamAlias("city") 
private String City; 

@XStreamAlias("country") 
private String Country; 
} 

主要代碼:

FileReader reader = new FileReader("file.xml"); // load file 

XStream xstream = new XStream(); 
xstream.processAnnotations(Person.class); 
xstream.processAnnotations(Address.class); 

Person person = (Person) xstream.fromXML(reader); 
0

我相信address會在你的類Person目的Address的參考。如果是這樣,那麼你需要這樣做:

Person.java 

public class Person{ 
private String name; 
    private int age; 
    private Address address; 
    public String getName(){ 
     return name; 
    } 
    public int getAge(){ 
     return age;} 
    public String getcity(){ 
     return address.getCity(); 
    } 
    public String getCountry(){ 
     return address.getCountry(); 
    } 
} 

Address.java 

public class Address { 
    private String city; 
    private String country; 
    public String getCity(){ 
     return city; 
    } 
    public String getCountry(){ 
     return country; 
    } 
} 

JAVA CODE 

FileReader xmlReader = new FileReader("file.xml"); // load file 

XStream stream = new XStream(new StaxDriver()); 
stream.alias("person",Person.class);//Since in your xml file `person` is tag 

Person person = (Person) stream.fromXML(xmlReader); 

System.out.println("Name:"+person.getName()+"\nAge:"+person.getAge()+ 
      "\nCity:"+person.getCity()+"\nCountry:"+person.getCountry();