繁体   English   中英

JAXB解组问题

[英]JAXB unmarshaling issue

我试图解组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>    

主要()

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

    }

我哪里弄错了?

设置@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>  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM