2012-11-10 123 views
2

这会很长,但我需要一些启发。我是JAXB的新手,所以请对我宽大。JAVA/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> 
+0

您所需的输出不是有效的XML文档。 – toniedzwiedz

+0

对不起,我意识到它不是。编辑。 –

+0

是否可以将xml结构更改为具有'course'元素? – oshai

回答

2

我建议在CourseList中有一个成员:List<Course>Course将包括当前在CourseList中的所有成员。
这是代码:

@XmlRootElement 
public class Courselist { 
    @XmlElement List<Course> course = new ArrayList<Course>(); 
} 
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; 
    } 

}