我想从我的编组对象构建一个org.w3c.dom.Document
。
我已经尝试了topic中描述的内容但是徒劳无功。
这是我的代码:
public Document serialise() throws Exception {
MyClass myObjectToMarshall = this.getObjectToMarshall();
JAXBContext jc = JAXBContext.newInstance(MyClass.class);
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
m.marshal(myObjectToMarshall , System.out);
StringWriter xml = new StringWriter();
m.marshal(myObjectToMarshall , xml);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
return builder.parse(new InputSource(new StringReader(xml.toString())));
}
执行此指令m.marshal(myObjectToMarshall , System.out);
时,我得到以下结果:
<myObjectToMarshall >
<id>15</id>
<code>MY_CODE</code>
<label>MY_LABEL</label>
<date>2015-09-15+02:00</date>
</myObjectToMarshall >
我想myObjectToMarshall的编组工作已经正确完成。
但是,当我使用IntelliJ builder.parse(new InputSource(new StringReader(xml.toString())))
调试最后一条指令时,我得到一个空文档:[#document: null]
是否还要设置其他属性?
请你能帮我解释为什么文件是空的吗?
提前谢谢。
P.S。我使用java 7。
答案 0 :(得分:0)
你的文件很好。
实施toString()
方法以返回"["+getNodeName()+": "+getNodeValue()+"]"
。文档的nodeName
为#document
,文档的nodeValue
为null
。请参阅Node的javadoc。
如果您需要DOM文档,请不要编组到String
,然后解析文本。只是直接编组到DOM树中:
public Document serialise() throws Exception {
MyClass myObjectToMarshall = this.getObjectToMarshall();
JAXBContext jc = JAXBContext.newInstance(MyClass.class);
DOMResult domResult = new DOMResult();
jc.createMarshaller().marshal(myObjectToMarshall, domResult);
return (Document)domResult.getNode();
}