使用XStream从XML获取对象

问题描述

我已经尝试了一段时间了。 在第一种方法中,我阅读了以下XML,并且非常适合此类。

<?xml version="1.0" encoding="UTF-8"?>
<SessionInfo>
   <SID>984d8edferer73201ac3f</SID>
   <Challenge>65892d4a</Challenge>
   <BlockTime>0</BlockTime>
   <Rights>
   </Rights>
</SessionInfo>

使用此类

@XStreamAlias("SessionInfo")
@Data
public class SessionInfo {
    private String SID;
    private String Challenge;
    private String BlockTime;

    private String Rights;
   }

现在我尝试阅读此XML

<?xml version="1.0" encoding="UTF-8"?>
<SessionInfo>
   <SID>eresrer93j33434</SID>
   <Challenge>45485ser</Challenge>
   <BlockTime>0</BlockTime>
   <Rights>
      <Name>Dial</Name>
      <Access>2</Access>
      <Name>App</Name>
      <Access>2</Access>
      <Name>HomeAuto</Name>
      <Access>2</Access>
      <Name>BoxAdmin</Name>
      <Access>2</Access>
      <Name>Phone</Name>
      <Access>2</Access>
      <Name>NAS</Name>
      <Access>2</Access>
   </Rights>
</SessionInfo>

,问题出在“权限”下的条目。理想情况下,我希望在对象的末尾有一个映射,可以据此进行读取。或同时具有两个属性的NameAccess类。不幸的是,我无法使用XStream做到这一点。

我尝试使用列表,但是没有用。 有人可以帮忙吗?

编辑: 我只是尝试了另一个...我想我更接近目标了,但仍然无法达到预期的效果。 现在我正在使用两个类:

@XStreamAlias("SessionInfo")
@Data
@NoArgsConstructor
public class SessionInfo {
    @XStreamAlias("SID")
    private String sid;
    @XStreamAlias("Challenge")
    private String challenge;
    @XStreamAlias("BlockTime")
    private String blockTime;
    @XStreamAlias("Rights")
    private Rights rights;
    }

@Data
@NoArgsConstructor
class Rights {
    @XStreamImplicit
    @XStreamAlias("Name")
    private List<String> names = new ArrayList<>();
    @XStreamAlias("Access")
    @XStreamImplicit
    private List<String> accesses = new ArrayList<>();
}

和XStream

  XStream xStream = new XStream();
      xStream.processAnnotations(SessionInfo.class);
      xStream.processAnnotations(Rights.class);
      return (SessionInfo) xStream.fromXML(response.body().toString());

然后我得到了我的SessionInfo类,但是有权限:

SessionInfo(sid=518e58erc70e226,challenge=rersrerer,blockTime=0,rights=Rights(names=[],accesses=[Dial,2,App,HomeAuto,BoxAdmin,Phone,NAS,2]))

为什么全部都放在访问列表中而不是名称中?

好的,我终于找到了解决方案! 我必须使用

    @XStreamImplicit(itemFieldName = "row")

现在两个列表都已填充。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)