【发布时间】:2016-02-23 12:22:46
【问题描述】:
我目前正在尝试将大量 XML 更改为 Java 对象,但我一直卡住。我尝试在网上复制很多不同的示例,但我似乎永远无法找到正确的方法,而且我发现很难调试。
我的 XML 看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<XMLSOCCER.COM>
<TeamLeagueStanding xmlns="http://xmlsoccer.com/LeagueStanding">
<Team>Leicester</Team>
<Team_Id>31</Team_Id>
<Played>26</Played>
<PlayedAtHome>12</PlayedAtHome>
<PlayedAway>14</PlayedAway>
<Won>15</Won>
<Draw>8</Draw>
<Lost>3</Lost>
<NumberOfShots>464</NumberOfShots>
<YellowCards>40</YellowCards>
<RedCards>1</RedCards>
<Goals_For>48</Goals_For>
<Goals_Against>29</Goals_Against>
<Goal_Difference>19</Goal_Difference>
<Points>53</Points>
</TeamLeagueStanding>
<TeamLeagueStanding xmlns="http://xmlsoccer.com/LeagueStanding">
<Team>Tottenham</Team>
<Team_Id>21</Team_Id>
...
所以我只有一个 TeamLeagueStanding 列表,我想将其保留为 Team 对象。我的 Team 类的 java 代码目前是这样的
@XmlRootElement(name = "TeamLeagueStanding")
public class Team {
@XmlElement(name = "Team")
String teamName;
@XmlElement(name = "Team_Id")
int teamID;
public Team (String team, int id) {
super();
this.teamName = team;
this.teamID = id;
}
}
我的 Teams 类就是用来保存 Teams 列表的
@XmlRootElement(name = "XMLSOCCER.COM")
public class Teams {
@XmlElement
List<Team> teamList;
public Teams () {
}
}
而我的主要功能是这样的
public class Main {
public static void main(String[] args) throws Exception {
File xml = new File("data/GetLeagueStandingsPrem1516.xml");
JAXBContext jc = JAXBContext.newInstance(Teams.class);
Unmarshaller um = jc.createUnmarshaller();
Teams t = (Teams) um.unmarshal(xml);
System.out.println(t.teamList.size());
}
}
我已经尝试了很多方法,但总是得到空指针异常或各种IllegalAnnotationExceptions。如果有人知道我哪里出错了,我将不胜感激!
谢谢,
西蒙
【问题讨论】:
-
考虑指定一个 XSD 并使用 xjc 生成 JAXB 类。 (注意:根元素只在根有效)
-
所以我认为问题出在我的 XML 而不是我的 Java - 我删除了 xmlns 属性并且下面的代码有效。
标签: java xml jaxb unmarshalling