【问题标题】:XStream don't convert a xml tagXStream 不转换 xml 标签
【发布时间】:2014-04-22 14:54:21
【问题描述】:

我有一个 xml。我想转换为 object , xstream 转换所有标签,除了其中一个它给出 null 。

关于这个问题的任何想法?

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");

当我检查对象 person 时,所有变量都正常,但地址始终是 null

我试过这个:

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

但还是不行!

【问题讨论】:

    标签: java xml xstream


    【解决方案1】:

    在这种情况下,别名的使用是多余的。 XStream 会自动转换字段名称。

    你的地址似乎是一个嵌套类型。您对两个别名使用相同的类型:

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

    应该是

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

    地址别名。

    【讨论】:

    • 请编辑您的问题并向我展示所涉及的类 AdressType 和 PersonType
    【解决方案2】:

    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);
    

    【讨论】:

      【解决方案3】:

      我相信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();
      

      【讨论】:

        猜你喜欢
        • 2013-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        相关资源
        最近更新 更多