2012-12-09 50 views
8

问题是我如何生成XML文件输出而不是system.out?JAXB编组Java输出XML文件

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 
     } 
    } 

} 
+1

你有没有在API看? –

回答

5

您已经编组到nosferatu.xml。只是删除或注释行:

marshaller.marshal(quickXML, System.out); 

,如果你不希望显示的输出,并关闭OutputStream

os.close(); 
+0

非常有帮助!谢谢!!!问题解决了。 – Ket

+0

@Reimeus我也面临类似的问题。请你看看http://stackoverflow.com/questions/24731037/marshalling-java-objects-into-xml-using-jaxb?noredirect=1#comment38381440_24731037 – Lucy

1

Marshaller#marshall(...)方法接受一个OutputStream或作家作为参数。如果你看过,你肯定会在API中找到它。

1

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

bean类与JAXP注释:

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; 
    } 
    } 

编组:

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); 
    } 
}