Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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
Java 用JAXB存根元素的简单方法?_Java_Jaxb - Fatal编程技术网

Java 用JAXB存根元素的简单方法?

Java 用JAXB存根元素的简单方法?,java,jaxb,Java,Jaxb,我刚刚开始学习使用JAXB将java对象编组为XML。序列化对象没有问题,但现在我要做的是在xml中插入一个元素,而该元素没有对应的POJO 例如,我有一个文件夹的列表,我想将每个文件夹放入一个名为文件夹的xml元素中。这有意义吗?我可以在适当的情况下将和写入输出流,但我希望以更正式的方式执行此操作。您可以使用JAXB和StAX来执行此操作。使用XMLStreamWriter将有助于规范与XML的交互,并使您能够更好地控制此类编码: package forum8406266; import j

我刚刚开始学习使用JAXB将java对象编组为XML。序列化对象没有问题,但现在我要做的是在xml中插入一个元素,而该元素没有对应的POJO


例如,我有一个
文件夹
的列表,我想将每个
文件夹
放入一个名为
文件夹
的xml元素中。这有意义吗?我可以在适当的情况下将
写入输出流,但我希望以更正式的方式执行此操作。

您可以使用JAXB和StAX来执行此操作。使用
XMLStreamWriter
将有助于规范与XML的交互,并使您能够更好地控制此类编码:

package forum8406266;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Folder.class);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

        List<Folder> folders = new ArrayList<Folder>(3);
        folders.add(new Folder());
        folders.add(new Folder());
        folders.add(new Folder());

        XMLOutputFactory xof = XMLOutputFactory.newFactory();
        XMLStreamWriter xsw = xof.createXMLStreamWriter(System.out);
        xsw.writeStartDocument();
        xsw.writeStartElement("Folders");

        for(Folder folder : folders) {
            marshaller.marshal(folder, xsw);
        }

        xsw.writeEndElement();
        xsw.writeEndDocument();
        xsw.flush();
    }

}

您可以使用JAXB和StAX来完成这项工作。使用
XMLStreamWriter
将有助于规范与XML的交互,并使您能够更好地控制此类编码:

package forum8406266;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Folder.class);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

        List<Folder> folders = new ArrayList<Folder>(3);
        folders.add(new Folder());
        folders.add(new Folder());
        folders.add(new Folder());

        XMLOutputFactory xof = XMLOutputFactory.newFactory();
        XMLStreamWriter xsw = xof.createXMLStreamWriter(System.out);
        xsw.writeStartDocument();
        xsw.writeStartElement("Folders");

        for(Folder folder : folders) {
            marshaller.marshal(folder, xsw);
        }

        xsw.writeEndElement();
        xsw.writeEndDocument();
        xsw.flush();
    }

}

这很有效,谢谢。每次调用
封送
,我都会得到一个无关的
,但这可能是一个不同的问题。您需要确保在封送器上设置JAXB_片段属性。这很好,谢谢。每次调用
封送
,我都会得到一个无关的
,但这可能是一个不同的问题。您需要确保在封送器上设置JAXB_FRAGMENT属性。