当前位置: 首页 > 知识库问答 >
问题:

JAXB从XML字符串到Java对象,哪里出了问题?

段恩
2023-03-14

我想从XML创建一些对象,但是当我尝试时,我得到了这个错误:

[26/07/12 16:20:03:763 CEST] ERROR sitemap.SitemapXMLServlet:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.sitemaps.org/schemas/sitemap/0.9", local:"urlset"). Expected elements are <{}url>
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.sitemaps.org/schemas/sitemap/0.9", local:"urlset"). Expected elements are <{}url>

我找不到问题所在,也不明白为什么会出问题。这是我尝试过的:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>http://LINK/shop/hoofdcategorie</loc>
        <lastmod>2012-07-26</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>
            http://LINK/shop/hoofdcategorie/subcategorie
        </loc>
        <lastmod>2012-07-26</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.5</priority>
    </url>
</urlset>
public void getXML() {
    final JAXBContext context = JAXBContext.newInstance(SitemapXML.class);
    final Unmarshaller unmarshaller = context.createUnmarshaller();
    String xml = URLReader.readUrlHttpClient("http://LINK/shop/sitemap.xml");
    final UrlSet urlSet = (UrlSet) unmarshaller.unmarshal(new StreamSource(new StringReader(xml)));
}

UrlSet类

@XmlRootElement(name = "urlset")
public class UrlSet {

    @XmlAttribute
    String xmlns;
    @XmlElement(name = "url")
    ArrayList<SitemapXML> sitemaps;


    public ArrayList<SitemapXML> getSitemaps() {
        return sitemaps;
    }

    public void setSitemaps(ArrayList<SitemapXML> sitemaps) {
        this.sitemaps = sitemaps;
    }

    @XmlAttribute
    public String getXmlns() {
        return xmlns;
    }

    public void setXmlns(String xmlns) {
        this.xmlns = xmlns;
    }
}

SitemapXML类我映射到url的内容

@XmlRootElement(name = "url")
public class SitemapXML {

    String loc;
    Date lastmod;
    String changefreq;
    Double priority;

    public String getLoc() {
        return loc;
    }
    public void setLoc(String loc) {
        this.loc = loc;
    }
    public Date getLastmod() {
        return lastmod;
    }
    public void setLastmod(Date lastmod) {
        this.lastmod = lastmod;
    }
    public String getChangefreq() {
        return changefreq;
    }
    public void setChangefreq(String changefreq) {
        this.changefreq = changefreq;
    }
    public Double getPriority() {
        return priority;
    }
    public void setPriority(Double priority) {
        this.priority = priority;
    }
}

共有1个答案

詹斌蔚
2023-03-14

您的xml使用了一个名称空间,但是您的注释没有提到名称空间。可以在XmlRootElement批注中指定命名空间,也可以在包级别添加XmlSchema批注。

 类似资料:
  • 问题内容: 如何使用下面的代码解组XML字符串并将其映射到下面的JAXB对象? 问题答案: 要传递XML内容,您需要将内容包装在中,然后将其解组:

  • 错误中的SOAP WSDL URL是Spring Boot应用程序中的另一个web服务。试图理解为什么这会出现在错误中。 UnmarshalException:意外元素(URI:“”,local:“message”)。需要的元素是<{http://soap_wsdl_url}jaxb_pojo_name>

  • 我有这样一个XML字符串: 当我试图将字符串读入这样的对象时 我得到以下错误: 我在类中使用@JsonProperty是因为@XmlElement还有其他问题。如果我在ResultModel类中排除字段QueryResults,那么字符串的解析工作正常,看起来是正确的。我做错了什么?我对Java中XML字符串的解析非常陌生,所以我希望有一些简单的方法来解决这个问题。。。

  • 我必须在JAXB中将xml解析为字符串对象。但是如何为这个xml创建对象 Country.xml 为了解析这个xml,我创建了一个类来映射对象,它创建对象并在控制台中打印出来。却不知道自己做错了什么。 当我运行程序时,我会得到 com . sun . XML . internal . bind . v2 . runtime . illegalanotationexception:illegalan

  • 问题内容: 是的,是的,我知道有关此主题的问题很多。但是我仍然找不到解决我问题的方法。我有一个带属性的Java对象。例如客户,如本例所示。我想要它的字符串表示形式。为此,Google建议使用JAXB。但是在所有示例中,创建的XML文件都会打印到文件或控制台,如下所示: 但是我必须使用该对象并以XML格式通过网络发送。所以我想得到一个表示XML的字符串。 我怎样才能做到这一点? 问题答案: 您可以使

  • 问题解决 将XmlElementRef注释更改为@XmlElementRef(name=“Option”,type=Option.class,required=false)后,将@XmlRootElement(name=“Option”)添加到选项中。班 更新: 根据laune的建议,我添加了两个类(Options和Option),并修改了GuimopProperties类,如下所示 但当我必须新