我有这样的 xml 内容:
<EVENTSTREAM id="2016050408105300002" name="LATESTWINNERS" rc="0">
<ROUND id="2016050309342400001" nyxid="2016050309342400003">
<TIMESTAMP>2016-05-03T09:34:24.000</TIMESTAMP>
<PLAYERINFO accountid="112307829" firstname="Simon" lastname="Schork" nickname="SimonSchork" zip="76133" operatorid="275" currency="EUR" language="" country="DE" city="SimonSchork" sex="M" universe="Default"/>
<CHANNEL>I</CHANNEL>
<BALANCE>110.34</BALANCE>
<WONAMOUNT>3.00</WONAMOUNT>
<BONUSWONAMOUNT>0.00</BONUSWONAMOUNT>
<SUBSYSTEMID>3</SUBSYSTEMID>
<CAT1>1</CAT1>
<CAT2>1</CAT2>
<CAT3>30136</CAT3>
<OUTCOME>W</OUTCOME>
<CLIENT>flash</CLIENT>
<BETAMOUNT>1.00</BETAMOUNT>
<BONUSBETAMOUNT>0.00</BONUSBETAMOUNT>
<BASECURRENCY>EUR</BASECURRENCY>
</ROUND>
我创建了这样的模型,LastWinnersModel
@Root(name = "EVENTSTREAM", strict = false)
public class LastWinnersModel {
@Attribute(name = "name", required = false)
private String name;
@Attribute(name = "rc")
private int rc;
@Attribute(name = "id")
private long id;
@ElementList(name = "ROUND", entry = "ROUND", inline = true, required = false)
private List<RoundModel> lastWinners = new ArrayList<>();
圆形模型
@Root(name = "ROUND", strict = false)
public class RoundModel {
@Attribute(name = "id")
private long id;
@Attribute(name = "nyxid")
private long nyxId;
@Element(required = false)
private LastWinnerModel lastWinnerModel;
和 LastWinnerModel
public class LastWinnerModel {
@Attribute(name = "TIMESTAMP")
private String date;
@Attribute(name = "CHANNEL")
private String channel;
@Attribute(name = "BALANCE")
private BigDecimal balance;
@Attribute(name = "WONAMOUNT")
private BigDecimal wonAmonut;
@Attribute(name = "BONUSWONAMOUNT")
private BigDecimal bonusWonAmount;
@Attribute(name = "SUBSYTEMID")
private int subsystemId;
@Attribute(name = "CAT1")
private int cat1;
@Attribute(name = "CAT2")
private int cat2;
@Attribute(name = "CAT3")
private int cat3;
@Attribute(name = "OUTCOME")
private String outcome;
@Attribute(name = "CLIENT")
private String client;
@Attribute(name = "BETAMOUNT")
private BigDecimal betAmount;
@Attribute(name = "BONUSBETAMOUNT")
private BigDecimal bonusBetAmount;
@Attribute(name = "BASECURRENCY")
private String baseCurrency;
@Attribute(name = "PLAYERINFO")
private PlayerInfoModel playerInfo;
在休息
@Element(required = false)
private LastWinnerModel lastWinnerModel;
尽管我从外部服务收到一些数据,但 始终为空。我想问题是 LastWinnerModel 没有 root 或者我的模型可能有问题?感谢您的回复。
最佳答案
似乎您没有使用 JAXB 进行 XML 绑定(bind),而是使用具有类似(但不相同的注释)的类似框架。我只能回答 JAXB,但很可能与您的框架存在相同的问题:
看来,模型的嵌套并未反射(reflect) XML 中的嵌套。 在 XML 中,TIMESTAMP 标签是 ROUND 标签的直接子代,即正确缩进的 XML 如下所示:
<EVENTSTREAM...
<ROUND...
<TIMESTAMP...
因此 JAXB 会尝试将 TIMESTAMP 标记映射到 RoundModel 类中的变量。然而,这样的变量并不存在,因此 TIMESTAMP 的 XML 值根本不会映射到您的模型中并会丢失(CHANEL、BALANCE 也是如此)。
您定义的模型将映射到以下结构的 XML:
<EVENTSTREAM ...
<ROUND...
<lastWinnerModel...
<TIMESTAMP...
但是,如果您无法更改 XML,那么在 JAXB 中,我不知道通过添加另一个神奇注释来映射模型的真正简单方法。 (例如,您可以在 JAXB 中为此使用 XmlAdapter 类。)因此,如果您陷入 XML 困境,那么将 RoundModel 和 LastWinnerModel 合并到一个类中是最简单的方法。
关于java - Xml解析为Java对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37026853/