Java 解析JAXB类时获取意外的元素异常
你能帮我解决这个问题吗 在这里,我试图解组一个XML文件,并得到以下错误: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.
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>