how to marshal a JAXB object to org.w3c.dom.Document?

后端 未结 2 1909
别那么骄傲
别那么骄傲 2020-12-14 20:11

This gives me a Document object with a top level node with no child nodes:

public static Document getDocument(Object jaxb)
{
    DocumentBuilderFactory dbf =         


        
相关标签:
2条回答
  • 2020-12-14 20:24

    What you are doing should work. Here is an example:

    Domain Model (Foo)

    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    public class Foo {
    
        private String bar;
    
        public String getBar() {
            return bar;
        }
    
        public void setBar(String bar) {
            this.bar = bar;
        }
    
    }
    

    Demo

    import javax.xml.bind.*;
    import javax.xml.parsers.*;
    import javax.xml.transform.*;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    
    import org.w3c.dom.Document;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            // Create the JAXBContext
            JAXBContext jc = JAXBContext.newInstance(Foo.class);
    
            // Create the Object
            Foo foo = new Foo();
            foo.setBar("Hello World");
    
            // Create the Document
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document document = db.newDocument();
    
            // Marshal the Object to a Document
            Marshaller marshaller = jc.createMarshaller();
            marshaller.marshal(foo, document);
    
            // Output the Document
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer t = tf.newTransformer();
            DOMSource source = new DOMSource(document);
            StreamResult result = new StreamResult(System.out);
            t.transform(source, result);
        }
    
    }
    

    Output

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><foo><bar>Hello World</bar></foo>
    
    0 讨论(0)
  • 2020-12-14 20:26

    try this

        DOMResult res = new DOMResult();
        JAXBContext context = JAXBContext.newInstance(obj.getClass());
        context.createMarshaller().marshal(obj, res);
        Document doc = (Document) res.getNode();
    
    0 讨论(0)
提交回复
热议问题