需要JAVA / JAXB帮助

时间:2012-11-10 21:05:19

标签: java jaxb

这将是漫长的但我需要一些启示。我是JAXB的新手,所以请对我宽容。

CourseApp:

package Courses;

import java.io.File;
import java.util.ArrayList;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class CoursesApp {
    public static void main(String[] args) {
            Courselist courselist = new Courselist();
            courselist.setclassType("Lecture");
            courselist.setcourseCode("2002");
            courselist.setgroupIndex("1");
            courselist.setprofessor("Professor James");
        try{
            File file = new File("C:\\Courselist.xml");
            JAXBContext jaxbContext = JAXBContext.newInstance(Courselist.class);
            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            jaxbMarshaller.marshal(courselist, file);
            jaxbMarshaller.marshal(courselist, System.out);

        }catch(JAXBException e)
        {
            e.printStackTrace();
        }
    }
}

Courselist:

package Courses;

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Courselist {

    String courseCode;
    String classType;
    String groupIndex;
    String professor;

    public String getcourseCode() {
        return courseCode;
    }

    @XmlElement
    public void setcourseCode(String courseCode) {
        this.courseCode = courseCode;
    }

    public String getclassType() {
        return classType;
    }

    @XmlElement
    public void setclassType(String classType) {
        this.classType = classType;
    }

    public String getgroupIndex() {
        return groupIndex;
    }

    @XmlElement
    public void setgroupIndex(String groupIndex) {
        this.groupIndex = groupIndex;
    }

    public String getprofessor() {
        return professor;
    }

    @XmlElement
    public void setprofessor(String professor) {
        this.professor = professor;
    }
}

输出:

  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
- <courselist>
  <classType>Lecture</classType> 
  <courseCode>2002</courseCode> 
  <groupIndex>1</groupIndex> 
  <professor>Professor James</professor> 
  </courselist>

我想要的是在同一个XML中创建另一个courselist实例:

  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
- <courselist>
  -<course>
     <classType>Lecture</classType> 
     <courseCode>2002</courseCode> 
     <groupIndex>1</groupIndex> 
     <professor>Professor James</professor>
   </course>
  -<course>
     <classType>Lecture</classType> 
     <courseCode>2003</courseCode> 
     <groupIndex>2</groupIndex> 
     <professor>Professor John</professor> 
   </course>
  </courselist>

2 个答案:

答案 0 :(得分:2)

如果List<Course>将包含当前Course中的所有成员,我建议在CourseList中有一名成员:CourseList
这是代码:

@XmlRootElement
public class Courselist {
    @XmlElement List<Course> course = new ArrayList<Course>();
}

答案 1 :(得分:0)

<强> Courselist

作为oshai answered我会有一个包含两个类CourselistCourse的模型。以下是Courselist类的外观。为了匹配Java编程约定,包名称通常是小写的。此外,它通常也基于域名(例如com.example.courses)。默认情况下,JAXB (JSR-222)实现会在属性上查找元数据(getset方法),因此我将它们放在那里(请参阅:http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html)。

package courses;

import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Courselist {

    List<Course> courses;

    @XmlElement(name="course")
    public List<Course> getCourses() {
        return courses;
    }

    public void setCourses(List<Course> courses) {
        this.courses = courses;
    }

}

<强>课程

您在Courselist课程中的信息我已转到新的Course课程。 JAXB是异常配置,因此您只需要在希望XML表示与默认值不同的地方添加注释。在您的用例中,您不需要在此类上添加任何注释(请参阅:http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html)。我已经修改了属性方法的大小,以匹配正常的Java编码约定。

package courses;

public class Course {

    String courseCode;
    String classType;
    String groupIndex;
    String professor;

    public String getCourseCode() {
        return courseCode;
    }

    public void setCourseCode(String courseCode) {
        this.courseCode = courseCode;
    }

    public String getClassType() {
        return classType;
    }

    public void setClassType(String classType) {
        this.classType = classType;
    }

    public String getGroupIndex() {
        return groupIndex;
    }

    public void setGroupIndex(String groupIndex) {
        this.groupIndex = groupIndex;
    }

    public String getProfessor() {
        return professor;
    }

    public void setProfessor(String professor) {
        this.professor = professor;
    }

}