首页 文章

JAXB编组Java以输出XML文件

提问于
浏览
9

问题是如何生成XML文件输出而不是system.out?

package jaxbintroduction;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        itemorder.Book quickXML = new itemorder.Book();

        quickXML.setAuthor("Sillyme");
        quickXML.setDescription("Dummie book");
        quickXML.setISBN(123456789);
        quickXML.setPrice((float)12.6);
        quickXML.setPublisher("Progress");
        quickXML.setTitle("Hello World JAVA");

        try {            
            javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(quickXML.getClass().getPackage().getName());
            javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller();
            marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N
            marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            marshaller.marshal(quickXML, System.out);
            OutputStream os = new FileOutputStream( "nosferatu.xml" );
            marshaller.marshal( quickXML, os );

        } catch (javax.xml.bind.JAXBException ex) {
            // XXXTODO Handle exception
            java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); //NOI18N
        }
    }

}

4 回答

  • 1

    你已经编组到了 nosferatu.xml . 只需删除或评论该行:

    marshaller.marshal(quickXML, System.out);
    

    如果您不想显示输出并关闭 OutputStream

    os.close();
    
  • 8

    如果您使用的是JAXB 2.1或更高版本,则可以直接封送到 java.io.File 对象:

    File file = new File( "nosferatu.xml" );
     marshaller.marshal( quickXML, file );
    

    Corrsponding Javadoc

  • 1

    Marshaller#marshall(...) 方法将OutputStream或Writer作为参数 . 如果你看过,你肯定会在API中找到这个 .

  • 5

    它只是从java对象到xml文件的转换过程 . 它与序列化非常相似,您必须确保序列化和编组 . 在这里,我已经完成了编组的样本 . 您可以以类似的方式进行解组 .

    bean class with jaxp annotations:

    package com.ofs.swinapps;
    
    import javax.xml.bind.annotation.XmlRootElement;
    
        @XmlRootElement
        public class Employee {
        private String name;
        private String id;
        private String department;
        private int age;
        private int salary;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
    
        public String getDepartment() {
            return department;
        }
    
        public void setDepartment(String department) {
            this.department = department;
        }
    
        public int getAge() {
            return age;
    }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public int getSalary() {
            return salary;
        }
        public void setSalary(int salary) {
            this.salary = salary;
        }
        }
    

    marshalling:

    import java.io.File;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    
    public class Java2XMLExample {
        public static void main(String[] args) throws JAXBException {
     Employee employee = new Employee();
     employee.setName("Kowthal ganesh");
     employee.setAge(23);
     employee.setDepartment("Chola-ccms");
     employee.setId("947");
     employee.setSalary(8333);
     File file = new File("D:/build.xml");
     JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class);
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
     jaxbMarshaller.marshal(employee, file);
        }
    }
    

相关问题