关于这个问题有几个帮助主题 但我还没有找到解决我的问题的解决方案。 我感谢解决问题的指导。
我尝试通过 Marshal 生成 xml,下面的 xml 是从代码生成的。
我必须使用下面的 xml 结构:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test>
<testSubject>
<firstName>test1</firstName>`enter code here`
<lastNAme>lastname</lastNAme>
<ssn>123456</ssn>
</testSubject>
</Test>
代码
@XmlRootElement(name = "Test")
public class Test {
public Test()
{
testSubject = new ArrayList<TestSubject>();
}
List<TestSubject> testSubject;
@XmlElement(name = "testSubject", type = TestSubject.class)
public List<TestSubject> getTestSubject() {
return testSubject;
}
public void setTestSubject(List<TestSubject> testSubject) {
this.testSubject = testSubject;
}
TestSubject 类
public class TestSubject {
String firstName;
String lastNAme;
int ssn;
//getters and setters
}
//在我的主类中解码代码
JAXBContext jc = JAXBContext.newInstance(Test.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("c://testSubjects.xml");
Test tests = (Test) unmarshaller.unmarshal(xml);
异常
javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"TestSubject"). Expected elements are <{}Test>
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662)
最佳答案
您似乎没有向我们展示您试图解码的真实 XML。如果您的 XML 格式为
,就会出现您看到的错误<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<testSubject>
<firstName>test1</firstName>
<lastNAme>lastname</lastNAme>
<ssn>123456</ssn>
</testSubject>
代替
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test>
<testSubject>
<firstName>test1</firstName>
<lastNAme>lastname</lastNAme>
<ssn>123456</ssn>
</testSubject>
</Test>
只需更正即可。
正如堆栈跟踪所说
javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"TestSubject"). Expected elements are <{}Test>
您正在获得一个 <testSubject>
节点,而您期望的是一个 <Test>
节点。因为 <Test>
是根节点,所以它出现的地方。
关于javax.xml.bind.UnmarshalException : unexpected element (uri :"", 本地 :"TestSubject")。预期元素是 <{}Test>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21821272/