java 你能把一个jaxb对象转换成org.w3c.dom.Element吗?

jutyujz0  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(120)

我从另一个不使用Java的部门得到了一些.xsd文件。我需要编写与指定格式对应的xml。因此,我将它们jaxb转换为Java类,并且我能够编写一些xml。到目前为止一切顺利。但是现在元素/类之一包含一个属性,您可以(/您应该能够)在其中插入任何xml。我需要在其中插入其他jaxb元素之一。
在java中,我们有:

import org.w3c.dom.Element;
...
        @XmlAccessorType(XmlAccessType.FIELD)
        @XmlType(name = "", propOrder = {
            "any"
        })
        public static class XMLDocument {

            @XmlAnyElement
            protected Element any;

            /**
             * Gets the value of the any property.
             * 
             * @return
             *     possible object is
             *     {@link Element }
             *     
             */
            public Element getAny() {
                return any;
            }

            /**
             * Sets the value of the any property.
             * 
             * @param value
             *     allowed object is
             *     {@link Element }
             *     
             */
            public void setAny(Element value) {
                this.any = value;
            }

        }

我想插入的对象属于这个类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "contactInfo",
    ...
})
@XmlRootElement(name = "Letter")
public class Letter {

    @XmlElement(name = "ContactInfo", required = true)
    protected ContactInformationLetter contactInfo;
    ...

我希望我能做这样的事:

Letter letter = new Letter();

XMLDocument xmlDocument = new XMLDocument();
xmlDocument.setAny(letter);

但当然字母不是“元素”类型。

fjaof16o

fjaof16o1#

您必须将它编组到一个文档中,从该文档中您可以获得元素:

Letter letter = new Letter();

// convert to DOM document
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
JAXBContext context = JAXBContext.newInstance(Letter.class.getPackage().getName());
Marshaller marshaller = context.createMarshaller();

XMLDocument xmlDocument = new XMLDocument();
xmlDocument.setAny(document.getDocumentElement());

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

相关问题