JAXB解组问题

时间:2014-03-06 20:00:38

标签: java xml jaxb

我正在尝试解组XML文件。但是,我最终得到了:

unexpected element (uri:"", local:"show-list"). Expected elements are <{}showList>

我的代码:

显示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "title", "description", "host", "logo", "feed" })
public class Show {
    private String title;
    private String description;
    private String host;
    private String logo;
    private String feed;  
        // getter, setter  

}  

ShowList:

@XmlRootElement
public class ShowList {

    @XmlElementWrapper(name = "shows")
    @XmlElement(name = "show")
    private ArrayList<Show> shows;

    public ArrayList<Show> getList() {
        return shows;
    }

    public void setList(ArrayList<Show> shows) {
        this.shows = shows;
    }

}  

XML:

<?xml version="1.0" encoding="utf-8"?>
<show-list count="23">
    <show>
        <title>TQA Weekly</title>
        <description>
            <![CDATA[
            Technology Show, dedicated to those who wish to learn about new electronics that they have bought, or will buy soon. 
            We will explaining in each episode new ways of doing things like protecting your identity online, file backup and storage, encryption, using email wisely, and each show we will be giving you new tools to do so. 
            You may visit our web-site for show notes, lists of software, links to sites, other suggested web-sites, or to send e-mails to Steve Smith with questions, comments or concerns.
            ]]>
        </description>
        <host>Steve Smith</host>
        <logo>http://images.tqaweekly.com/tqa-weekly-logo.png</logo>
        <feed>http://feeds.podtrac.com/tTKj5t05olM$</feed>
    </show>  
...  
</show-list>    

main()

public static void main(String[] args) {
        JAXBContext context;
        try {
            context = JAXBContext.newInstance(ShowList.class);
            Unmarshaller um = context.createUnmarshaller();
            ShowList list = (ShowList) um.unmarshal(new File("D:/Program Files/apache-tomcat-7.0.35-windows-x86/apache-tomcat-7.0.35/webapps/xml/show.xml"));
            System.out.println(list.getList().size());
        } catch (JAXBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

我在哪里犯了错误?

1 个答案:

答案 0 :(得分:3)

设置@XmlRootElement name属性的值

@XmlRootElement(name = "show-list")

否则JAXB使用类的名称。

另外,摆脱

@XmlElementWrapper(name = "shows")

如果您的XML就像

那样就可以了
<show-list count="23">
    <shows>
        <show>
            <title>TQA Weekly</title>
            <description>
            <![CDATA[
            Technology Show, dedicated to those who wish to learn about new electronics that they have bought, or will buy soon. 
            We will explaining in each episode new ways of doing things like protecting your identity online, file backup and storage, encryption, using email wisely, and each show we will be giving you new tools to do so. 
            You may visit our web-site for show notes, lists of software, links to sites, other suggested web-sites, or to send e-mails to Steve Smith with questions, comments or concerns.
            ]]>
            </description>
            <host>Steve Smith</host>
            <logo>http://images.tqaweekly.com/tqa-weekly-logo.png</logo>
            <feed>http://feeds.podtrac.com/tTKj5t05olM$</feed>
        </show>
    </shows>
</show-list>