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);
}
}
}