Это ошибки, которые я получаю. Я понимаю, что есть проблема с моей схемой и что она не может найти элемент студента. Но почему он не может найти элемент вне меня. В идеале я бы хотел, чтобы это работало, чтобы я мог получить имя, классы и курсы для учащихся, чтобы рассчитать средневзвешенный класс и отсортировать студентов по имени. Мне хотелось бы знать, что я делаю неправильно. Я следил за учебниками на веб-сайте простых XML-сериализаторов, но я не понимаю, почему он не работает. Также номер строки, которую он дает там, не приводит ни к чему в моем коде.
Любая помощь приветствуется.
Exception in thread "main" org.simpleframework.xml.core.ElementException: Element 'students' does not have a match in class Student at line 2
at org.simpleframework.xml.core.Composite.readElement(Composite.java:527)
at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
at org.simpleframework.xml.core.Composite$Injector.read(Composite.java:1433)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.Persister.read(Persister.java:625)
at org.simpleframework.xml.core.Persister.read(Persister.java:606)
at org.simpleframework.xml.core.Persister.read(Persister.java:584)
at org.simpleframework.xml.core.Persister.read(Persister.java:543)
at org.simpleframework.xml.core.Persister.read(Persister.java:521)
at org.simpleframework.xml.core.Persister.read(Persister.java:426)
at Deserializer.main(Deserializer.java:17)
Это мой XML im, пытающийся десериализовать.
<uni>
<students>
<student>
<studentName>Joe</studentName>
<studentCourses>
<course name="XML" grade="2" />
<course name="Java" grade="5" />
</studentCourses>
</student>
<student>
<studentName>Jane</studentName>
<studentCourses>
<course name="XML" grade="3" />
<course name="Java" grade="5" />
</studentCourses>
</student>
</students>
</uni>
Мои классы Java, которые должны соответствовать схеме XML.
Класс Uni
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;
@Root(name="uni")
public class Uni {
@Element(name="students")
public Students students;
public Uni(){}
}
Студенческий класс
import java.util.List;
import org.simpleframework.xml.*;
public class Students {
@ElementList(name="student", entry="students", inline=true)
public List<Student> student;
public Students(){}
public List getProperties(){
return student;
}
Студенческий класс
import java.util.List;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
//@Element
public class Student {
@Element(name="studentName")
public String studentName;
@ElementList(name="studentCourses")
public List<StudentCourses> studentCourses;
//public Student (){}
public Student(String studentName){
this.studentName = studentName;
}
public String getStudentName(){
return this.studentName;
}
}
Класс StudentCourse
import java.util.List;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
@Element
public class StudentCourses {
@ElementList(name="studentCourses")
public List<Course> course;
}
Класс курса
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
public class Course {
@Element(name="course", required=false)
public String course;
@Attribute(name="name")
public String courseName;
@Attribute(name="grade")
public int grade;
//default constructor
public Course () {}
public String getCourseName (String courseName){
return this.courseName = courseName;
}
public int getCourseGrade (int courseGrade){
return this.grade = courseGrade;
}
}
Класс десериализатора
import java.io.File;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
public class Deserializer {
public static void main(String[] args) throws Exception {
Serializer serializer = new Persister();
File result = new File("stud.xml");
Student student = serializer.read(Student.class, result);
//Students stud = serializer.read(Students.class, result);
System.out.println(student.getStudentName());
//System.out.println(stud.getProperties());
}
}
Ваш XML файл содержит <uni>
, но вы пытаетесь его проанализировать, как если бы это был единственный Student
:
Student student = serializer.read(Student.class, result);
System.out.println(student.getStudentName());
Вы уже определили объект, соответствующий <uni>
, который может содержать много нулевых или многих учеников. Разбор с:
Uni uni = serializer.read(Uni.class, result);
for (Student student : uni.students.student) {
System.out.println(student.getStudentName());
}
@ElementList
указываетentry="students"
@ElementList
entry="students"
, когда XML-элемент в вашем документе являетсяstudent
.