jaxb как маршалировать значения в каком-то порядке? - PullRequest
2 голосов
/ 01 февраля 2012

fe Я хочу иметь xml, где значения моей коллекции хранятся в алфавитном порядке:

<tag1>a</tag1>
<tag1>b</tag1>
<tag1>c</tag1>

возможно ли это с jaxb?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

Используйте упорядоченную коллекцию на стороне Java.

Root

Свойство tag1 является SortedSet. Вы можете передать Comparator при создании TreeSet:

package forum9096805;

import java.util.*;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Root {

    private SortedSet<String> tag1 = new TreeSet<String>();

    public SortedSet<String> getTag1() {
        return tag1;
    }

    public void setTag1(SortedSet<String> tag1) {
        this.tag1 = tag1;
    }

}

Демо

package forum9096805;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class);

        Root root = new Root();
        root.getTag1().add("b");
        root.getTag1().add("c");
        root.getTag1().add("a");

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }

}

выход

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <tag1>a</tag1>
    <tag1>b</tag1>
    <tag1>c</tag1>
</root>
2 голосов
/ 01 февраля 2012

Вопрос должен быть: Возможно ли это в XSD (XML Schmea)? И ответом является NO . Но вы можете убедиться, что экземпляр XML содержит данные в алфавитном порядке, используя упорядоченную коллекцию, такую ​​как реализации List или массив.

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