Java 解析JAXB类时获取意外的元素异常

Java 解析JAXB类时获取意外的元素异常,java,jaxb,Java,Jaxb,你能帮我解决这个问题吗 在这里,我试图解组一个XML文件,并得到以下错误: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"question"). Expected elements are <{http://data.schemas.financial.abc.com/Common/2009-09-01/}question> at com.sun.xml.internal.bind.

你能帮我解决这个问题吗

在这里,我试图解组一个XML文件,并得到以下错误:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"question"). Expected elements are <{http://data.schemas.financial.abc.com/Common/2009-09-01/}question>
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Unknown Source)
XmltoObject.java XML文件:

java是一种编程语言
101
拉维
java是一个平台
102
厕所
什么是java?

根据您的映射,JAXB希望XML是:

<cmn:question id="1" xmlns:cmn="http://data.schemas.financial.abc.com/Common/2009-09-01/">  
    <answers>...</answers>
</cmn:question>  



  • 您可以通过使用一个unmarshal方法使JAXB忽略根元素,该方法采用
    Class
    参数

  • 您需要使用声明的名称空间正确地为xml元素添加前缀(
    xmlns:cmn=”http://data.schemas.financial.abc.com/Common/2009-09-01/“
    )-例如,问题元素看起来像
    。另一种方法是删除前缀
    cmn
    (这样名称空间定义看起来像
    )。嗨Blaise,你提供的链接回答的问题是不可行的…它使用saxparser,但我只想使用jaxb,嗨fateddy,我不能在这里更改xml,这是我的项目中的一个限制…只需从
    @XmlRootElement
    注释中删除
    名称空间
    属性。已删除并尝试..相同的问题HKS Blaise…您能告诉我xml是否类似于:;abc1 ccd1 true@user3640657-你评论中的XML与你问题中的XML有什么关系?这是两个不同的XML..我的项目中的XML非常大,我不能在这里发布..所以我尝试了一个简单的例子…通过创建一个带有某个命名空间的XML..但是我的评论是我在当前的项目中使用的XML的一个示例project和我不能修改我的项目中的xml…@user3640657-这个问题应该集中在简化的xml上。看起来更大的XML应该是一个新问题。我不会在这里提出我的答案来解决这个问题,但如果你开始提出一个新问题,我会尽力帮助你。
    package JAXBTest;
    
    public class Answer {  
    private int id;  
    private String answername;  
    private String postedby;  
    public Answer() {}  
    public Answer(int id, String answername, String postedby) {  
        super();  
        this.id = id;  
        this.answername = answername;  
        this.postedby = postedby;  
    }  
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public String getAnswername() {  
        return answername;  
    }  
    public void setAnswername(String answername) {  
        this.answername = answername;  
    }  
    public String getPostedby() {  
        return postedby;  
    }  
    public void setPostedby(String postedby) {  
        this.postedby = postedby;  
    }  
    
    }  
    
    package JAXBTest;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.List;
    
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Unmarshaller;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    public class XmltoObject {
    
        public static void main(String[] args) throws FileNotFoundException {  
    
             try {  
    
                File file = new File("C:\\Users\\u6026472\\Desktop\\question.xml");  
                JAXBContext jaxbContext = JAXBContext.newInstance(JAXBTest.Question.class);  
    
          Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();  
    
          Question que= (Question) jaxbUnmarshaller.unmarshal(file);  
    
                System.out.println(que.getId()+" "+que.getQuestionname());  
                System.out.println("Answers:");  
                List<Answer> list=que.getAnswers();  
                for(Answer ans:list)  
                  System.out.println(ans.getId()+" "+ans.getAnswername()+"  "+ans.getPostedby());  
    
    
    
    
              } catch (JAXBException e) {  
                e.printStackTrace();  
              }  
    
            } 
    }
    
    @javax.xml.bind.annotation.XmlSchema(namespace = "http://data.schemas.financial.abc.com/Common/2009-09-01/")
    package JAXBTest;
    
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    
    <question id="1" xmlns:cmn="http://data.schemas.financial.abc.com/Common/2009-09-01/">  
            <answers>  
                <answername>java is a programming language</answername>  
                <id>101</id>  
                <postedby>ravi</postedby>  
            </answers>  
            <answers>  
                <answername>java is a platform</answername>  
                <id>102</id>  
                <postedby>john</postedby>  
            </answers>  
            <questionname>What is java?</questionname>  
        </question>  
    
    <cmn:question id="1" xmlns:cmn="http://data.schemas.financial.abc.com/Common/2009-09-01/">  
        <answers>...</answers>
    </cmn:question>  
    
    <question id="1" xmlns:cmn="http://data.schemas.financial.abc.com/Common/2009-09-01/">  
        <answers>...</answers>
    </question>