Простой способ заглушить элемент с JAXB? - PullRequest
1 голос
/ 07 декабря 2011

Я только начинаю учиться использовать JAXB для преобразования моих java-объектов в XML.У меня нет проблем с сериализацией объектов, но теперь я хочу вставить элемент в xml, для которого нет соответствующего POJO.

Например, у меня есть список Folder s,и я хочу поместить каждый Folder в элемент xml с именем Folders.Имеет ли это смысл?Я мог бы просто написать <Folders> и </Folders> в выходной поток, где это уместно, но я бы хотел сделать это более формальным способом.

1 Ответ

1 голос
/ 07 декабря 2011

Вы можете использовать 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();
    }

}

В приведенном выше коде предполагается, что ваш класс Folder помечен @XmlRootElement:

package forum8406266;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="Folder")
public class Folder {

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...