2011-08-10 22 views
2

我有幾個XSD文件和相應的XJC文件。使用JAXB生成的所有XML文件的版本號應該是統一的,應該從XJC或jaxb.properties文件中選取。我無法找到XML版本號,JAXB指的是。默認情況下它生成1.0。如何在使用JAXB進行編組時生成非1.0版本的XML版本

+1

只有兩種爲XML合法的版本號:1.0和1.1。有沒有什麼好的理由你想要生成1.1?或者你有可能誤解了XML聲明中version屬性的用途? –

回答

0

本質上,您需要使用Marshaller.JAXB_FRAGMENT屬性將JAXB Marshaller設置爲片段模式。然後自己編寫XML頭。以下示例演示瞭如何通過StAX完成此操作。

演示

package forum7009289; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Marshaller; 
import javax.xml.stream.XMLOutputFactory; 
import javax.xml.stream.XMLStreamWriter; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Root.class); 

     Root root = new Root(); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); 

     XMLOutputFactory xof = XMLOutputFactory.newFactory(); 
     XMLStreamWriter xsr = xof.createXMLStreamWriter(System.out); 
     xsr.writeStartDocument("1.1"); 
     marshaller.marshal(root, xsr); 
     xsr.writeEndDocument(); 
    } 

} 

package forum7009289; 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class Root { 

} 

輸出

<?xml version='1.1' encoding='UTF-8'?><root/>