Хобрук: Ваш путь к мастерству в программировании

Неупорядочивание нескольких xml в Jaxb

У меня есть 2 файла xsd, один из которых объявляет авторов, а другой объявляет книги и импортирует авторов из другого xsd.

Для автора:

    <xs:schema targetNamespace="ro.utcluj.cs.model.author"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               elementFormDefault="qualified">

        <xs:element name="author">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="authorName" type="xs:string"/>
                    <xs:element name="authorAge" type="xs:integer"/>
                    <xs:element name="CNP" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>

    </xs:schema>

Для книг:

<xs:schema targetNamespace="ro.utcluj.cs.model.book"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:author="ro.utcluj.cs.model.author"
           xmlns:tns="ro.utcluj.cs.model.book"
           elementFormDefault="qualified">

    <xs:import namespace="ro.utcluj.cs.model.author" schemaLocation="author.xsd"/>

    <xs:element name="book">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="bookName" type="xs:string"/>
                <xs:element name="title" type="xs:string"/>
                <xs:element ref="author:author"/>
                <xs:element name="genre" type="tns:bookGenre"/>
                <xs:element name="quantity" type="xs:integer"/>
                <xs:element name="price" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:simpleType name="bookGenre">
        <xs:restriction base="xs:string">
            <xs:enumeration value="ACTION"/>
            <xs:enumeration value="HISTORY"/>
        </xs:restriction>
    </xs:simpleType>


</xs:schema>

Я хочу написать несколько файлов xml и разобрать их с помощью Jaxb. Могу ли я записать авторов в один xml и книги в другой xml, чтобы Jaxb разобрал их, а затем каким-то образом объединил их? Или из-за того, что книги зависят от авторов, они оба должны быть написаны в одном XML с указанием их пространств имен?

14.04.2016

Ответы:


1

Я не уверен, что вы хотите сделать, но если вы пишете два файла *.xml и хотите их разархивировать, вы должны знать, какие из них должны быть проверены на соответствие «books.xsd», а какие — на «authors.xsd».

Допустим, вы сгенерировали классы из xsds (если это не так, вы можете прочитать: https://springframework.guru/you-should-use-jaxb-generated-classes-for-restful-web-services/ ИЛИ http://www.beingjavaguys.com/2013/04/create-spring-web-services-using-maven.html)

Далее вы должны знать, как использовать функциональность unmarshal/marshal. (http://www.source4code.info/2013/07/jaxb-marshal-unmarshal-with-missing.html)

После того, как у вас есть объекты из типа «Книга» и «Автор», вы можете использовать отражение, чтобы установить поле «автор» в объекте «Книга» (как я вижу из типа «Автор») в неупорядоченный объект из типа «Автор», который был сформирован из вашего автора. XML.

Другое решение может состоять в том, чтобы взять файлы book.xml и author.xml в виде строк и вручную написать функцию, которая может находить и заменять элементы в строке. Затем вы можете «поместить автора в книгу», и просто когда вы разберете строку, у вас будет полный объект из типа «Книга» с полной информацией (от автора.xml) для автора.

Надеюсь, я дал вам несколько направлений, удачи!

14.04.2016
Новые материалы

Управление DOM для чайников вроде меня
Одной из первых вещей, которую мы рассмотрели, когда начали изучать Javascript во Flatiron, была модель DOM. Кто он? Чем он занимается? Он больше машина, чем человек? Ну да довольно много. ДОМ..

Что такое структура данных?
Структура данных хранит и извлекает данные. Все, что обеспечивает эти две функции, является структурой данных . Период. Вы можете пропустить оставшуюся часть статьи, если ответ..

мои январские чтения по программированию
Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

Искусственный интеллект в юридической отрасли - пример прогнозирования судебных решений с помощью глубокого обучения
На протяжении всей истории люди полагались на суды, присяжных, королей и королев в отправлении правосудия. Сегодня способность судов обеспечивать справедливое и быстрое правосудие для своих..

Введение в машинное обучение для обнаружения аномалий (часть 1)
Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

Начало работы с Pulumi в Digital Ocean
Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..