Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > JAXP: вложенные узлы списком


Автор: Entry_N3 8.7.2014, 19:57
Есть XML: 
Код

<?xml version='1.0' encoding='UTF-8'?>
<root>
<name>CD</name>
<songs>
<song>Value1</song>
<song>Value2</song>
</songs>
</root>


Как создать классы, чтобы с помощью unmarshal устанавливались Value1 и Value2? Есть пример?

Автор: LSD 9.7.2014, 12:24
Код

    @XmlRootElement(name = "root")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Root {
        @XmlElement(name = "name")
        public String name;

        @XmlElement(name = "song")
        @XmlElementWrapper(name = "songs")
        public String[] songs;

        public Root() {
        }

        @Override
        public String toString() {
            return "Root{" +
                   "name='" + name + '\'' +
                   ", songs=" + Arrays.toString(songs) +
                   '}';
        }
    }

Автор: Entry_N3 14.7.2014, 11:06
А еще такой вариант как в объект преобразовывать и обратно
Код

<?xml version='1.0' encoding='UTF-8'?>
<root>
<name>CD</name>
<info>
<label>value_label</label>
<artist>value_artist</artist>
</info>
<songs>
<song>Value1</song>
<song>Value2</song>
</songs>
</root>

?

Автор: LSD 14.7.2014, 11:35
Тут нужно создать еще один объект для вложенной структуры:
Код

    @XmlRootElement(name = "root")
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Root {
        @XmlElement(name = "name")
        public String name;

        @XmlElement(name = "info")
        public Info info;

        @XmlElement(name = "song")
        @XmlElementWrapper(name = "songs")
        public String[] songs;

        public Root() {
        }

        @Override
        public String toString() {
            return "Root{" +
                   "name='" + name + '\'' +
                   ", info=" + info +
                   ", songs=" + Arrays.toString(songs) +
                   '}';
        }

        @XmlAccessorType(XmlAccessType.FIELD)
        public static class Info {
            @XmlElement(name = "label")
            public String label;
            @XmlElement(name = "artist")
            public String artist;

            public Info() {
            }

            @Override
            public String toString() {
                return "Info{" +
                       "label='" + label + '\'' +
                       ", artist='" + artist + '\'' +
                       '}';
            }
        }
    }

Автор: Entry_N3 14.7.2014, 14:01
LSD, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)