Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jaxb到XML文档_Jaxb_Marshalling - Fatal编程技术网

jaxb到XML文档

jaxb到XML文档,jaxb,marshalling,Jaxb,Marshalling,我需要将JavaBeans打包到org.w3c.dom.Element 我可以马歇尔到输出流,但不能马歇尔到XML文档。 我编写了以下测试代码: JAXBContext context = JAXBContext.newInstance(String.class); Marshaller m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE)

我需要将JavaBeans打包到org.w3c.dom.Element
我可以马歇尔到输出流,但不能马歇尔到XML文档。
我编写了以下测试代码:

JAXBContext context = JAXBContext.newInstance(String.class);            
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

String xmlRootName = "rootTag";
JAXBElement jaxbElement = new JAXBElement(new QName("", xmlRootName), String.class, "foo bar");
Element element;

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();

m.marshal(jaxbElement, doc);
System.out.println("Document: " + doc);

element = doc.createElement(xmlRootName);
m.marshal(jaxbElement, element);
System.out.println("Element1: " + element);

DOMResult res = new DOMResult();
m.marshal(jaxbElement, res);
element = ((Document)res.getNode()).getDocumentElement();
System.out.println("Element2: " + element);

StringWriter writer = new StringWriter();
m.marshal(jaxbElement, writer);
System.out.println("Writer: " + writer);
输出为:

Document: [#document: null]
Element1: [rootTag: null]
Element2: [rootTag: null]
Writer: <rootTag>foo bar</rootTag>
Document:[#Document:null]
Element1:[根标记:null]
Element2:[根标记:null]
作者:福巴
看起来编组只对输出流有效。如何转换为xml文档?

我做错了什么?

您正在正确编组对象。要记录结果,需要使用
javax.xml.transform
API。使用
System.out.println
得到的结果只是在DOM节点上调用
toString
的结果,该节点可以返回任何内容

Java模型 Foo

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
公开课Foo{
私人弦杆;
公共字符串getBar(){
返回杆;
}
公共空心立根杆(弦杆){
这个.bar=bar;
}
}
演示代码 演示

import javax.xml.bind.*;
导入javax.xml.parsers.*;
导入javax.xml.transform.*;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Foo.class);
//构建域对象
Foo-Foo=新的Foo();
foo.setBar(“你好,世界”);
//创建文档
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document Document=db.newDocument();
//封送对象到文档
Marshaller=jc.createMarshaller();
元帅(foo,文件);
//对生成的文档执行操作
NodeList elements=document.getElementsByTagName(“bar”);
对于(int x=0;x