Making JAXB generate an XML processing instruction
jaxb, xml, xslt
Solution
All the solutions here are pretty ugly and verbose. Simply set the line inside the `Mashaller` object specifying the additional header.
Marshaller jaxbMarshaller = ...
jaxbMarshaller.setProperty("com.sun.xml.bind.xmlHeaders",
"<?xml-stylesheet type='text/xsl' href='nameoffile.xsl' ?>");
This example will output an XML object to a file using a stylesheet and format the elements nicely for humans to read. The object `myXmlObject` is of class `MyXmlClass`, and will be written to `file`, formatted by a stylesheet given by `xslUrl`:
JAXBContext context = JAXBContext.newInstance(MyXmlClass.class);
Marshaller marshaller = context.createMarshaller();
//Need to use a Writer to marshal with the XSL
FileWriter fw = new FileWriter(file);
//Do this or else the XML is all one line and not human friendly...
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
"<?xml-stylesheet type='text/xsl' href=\"" +
xslUrl +
"\" ?>");
marshaller.marshal(myXmlObject, fw);
Update
In recent version of JAXB we need to use property key as `com.sun.xml.internal.bind.xmlHeaders` like below.
Marshaller jaxbMarshaller = ...
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders",
"<?xml-stylesheet type='text/xsl' href='nameoffile.xsl' ?>");
Problem
I am generating XML dynamically using JAXB. Now, I want to convert it to HTML using XSL. How can i include ``` <?xml-stylesheet type="text/xsl" href=""> ``` in the dynamically generated XML?