Java 如何整理节点或文档字段?

Java 如何整理节点或文档字段?,java,jaxb,Java,Jaxb,我想用这样一个字段来整理一个类: @XmlElement private Document content; (JAXB抱怨它不能封送接口,但这不是重点。) 我希望导入由内容表示的DOM树,并将其插入结果文档,因此我会得到如下结果: (此处为内容字段的文档值的根节点) ... 这可能吗?如果可能,如何实现 提前谢谢 您可以将字段/属性类型从文档更改为对象,以消除与接口相关的异常。当JAXB不知道要构建什么类型的对象时,它会将其视为DOM 域模型 根目录 import javax.xml.b

我想用这样一个字段来整理一个类:

@XmlElement
private Document content;
(JAXB抱怨它不能封送接口,但这不是重点。)

我希望导入由
内容
表示的DOM树,并将其插入结果文档
,因此我会得到如下结果:


(此处为内容字段的文档值的根节点)
...
这可能吗?如果可能,如何实现


提前谢谢

您可以将字段/属性类型从
文档
更改为
对象
,以消除与接口相关的异常。当JAXB不知道要构建什么类型的对象时,它会将其视为DOM

域模型 根目录

import javax.xml.bind.annotation.*;

@XmlRootElement
public class Root {

    private Object content;

    public Object getContent() {
        return content;
    }

    public void setContent(Object content) {
        this.content = content;
    }

}
import java.util.*;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlElementWrapper(name="content")
    @XmlAnyElement
    private List<Object> content;

    public Object getContent() {
        if(null == content || content.size() == 0) {
            return null;
        }
        return content.get(0);
    }

    public void setContent(Object content) {
        if(null == content) {
            this.content = null;
        } else {
            if(null == this.content) {
                this.content = new ArrayList<Object>(1);
            }
            this.content.set(0, content);
        }
    }

}
演示代码 input.xml


演示

import java.io.File;
import javax.xml.bind.*;
import org.w3c.dom.Element;

public class Demo {

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

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum18906595/input.xml");
        Root root = (Root) unmarshaller.unmarshal(xml);

        Element element = (Element) root.getContent();
        System.out.println(element.getNodeName());
    }

}
输出

import javax.xml.bind.annotation.*;

@XmlRootElement
public class Root {

    private Object content;

    public Object getContent() {
        return content;
    }

    public void setContent(Object content) {
        this.content = content;
    }

}
import java.util.*;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlElementWrapper(name="content")
    @XmlAnyElement
    private List<Object> content;

    public Object getContent() {
        if(null == content || content.size() == 0) {
            return null;
        }
        return content.get(0);
    }

    public void setContent(Object content) {
        if(null == content) {
            this.content = null;
        } else {
            if(null == this.content) {
                this.content = new ArrayList<Object>(1);
            }
            this.content.set(0, content);
        }
    }

}
在这里,根元素是与属性相对应的元素,而不是嵌套文档

content

使现代化 下面是一种可以利用
@xmlementwrapper
@xmlanyement
获得所需行为的方法。我使用了
@xmlacessortype(xmlacesstype.FIELD)
来保持字段中的所有魔力,而无需更改属性

根目录

import javax.xml.bind.annotation.*;

@XmlRootElement
public class Root {

    private Object content;

    public Object getContent() {
        return content;
    }

    public void setContent(Object content) {
        this.content = content;
    }

}
import java.util.*;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlElementWrapper(name="content")
    @XmlAnyElement
    private List<Object> content;

    public Object getContent() {
        if(null == content || content.size() == 0) {
            return null;
        }
        return content.get(0);
    }

    public void setContent(Object content) {
        if(null == content) {
            this.content = null;
        } else {
            if(null == this.content) {
                this.content = new ArrayList<Object>(1);
            }
            this.content.set(0, content);
        }
    }

}