В чем преимущество JAXB перед XSLT? - PullRequest
3 голосов
/ 01 апреля 2011

Я уже несколько дней обдумывал это и пробовал разные подходы, и я искал SO (см. Какова наилучшая практика преобразования XML в объект Java? ) итакже Google для использования JAXB поверх XSLT, но не может найти подходящий ответ.В течение многих лет я использовал Castor, JIBX и XSLT для различных проектов, поэтому я немного знаю о связывании XML.

Моя проблема в том, что у меня очень плоская структура XML, и я хочу ее разобратьJava-классы и сохраните их непосредственно в реляционной базе данных (должен быть Oracle).Небольшой пример ...

<Output>
    <Channel>
        <channelId>1</channelId>
        <genreId>1</genreId>
    </Channel>
    <Channel>
        <channelId>2</channelId>
        <genreId>2</genreId>
    </Channel>
    <Genre>
        <genreId>1</genreId>
        <name>Movies</name>
    </Genre>
    <Genre>
        <genreId>2</genreId>
        <name>Sport</name>
    </Genre>
    <ChannelName>
        <channelId>1</channelId>
        <name>The Movie Channel</name>
    </ChannelName>
    <ChannelName>
        <channelId>2</channelId>
        <name>The Sport Channel</name>
    </ChannelName>
</Output>

То, что я действительно хочу для приведенного выше XML, - это просто два простых аннотированных класса в отношении OneToOne, которые я могу сохранить с помощью JPA.В основном я хочу, чтобы классы отражали таблицы базы данных следующим образом:

class Channel {
    Long id;
    String name;
    Genre genre;        
}

class Genre {
    Long id;
    String name;       
}

XML будет только когда-нибудь разобран, и я действительно ищу простейшее решение этой проблемы, которое, как я понимаю, может быть субъективным вопросом.

Я фанат XSLT, поэтому действительно спрашиваю, если это хороший дизайн - использовать XSLT, чтобы сгибать исходный XML в лучшую структуру, чтобы более точно соответствовать коду, а затем просто использовать несколько очень простых аннотаций JAXB для привязки к моемуклассы.Или я должен выбрать «преобразование» с использованием JAXB, которое, я думаю, будет включать в себя более актуальный Java-код, например XMLAdapter s и другие аннотации.В принципе, в чем выгода, или что еще дает мне JAXB по сравнению с XSLT?

Ответы [ 3 ]

15 голосов
/ 01 апреля 2011

JAXB - это API привязки Java-объекта к XML.

XSL-T преобразует XML в XML.

Мне они не кажутся одинаковыми. Конечным результатом может быть XML, но источник в каждом случае различен.

Я думаю, что ответ зависит от вашего уровня комфорта с каждой технологией. Если комбинация XSL-T и JAXB кажется вам естественной, во что бы то ни стало, двигайтесь в этом направлении - если только это не повторяющаяся операция во время выполнения. В этом случае я бы сказал, что производительность может быть проблемой в зависимости от сложности преобразований.

2 голосов
/ 01 апреля 2011

Я бы посоветовал взглянуть на XStream , а именно на Конвертеры API.

XStream предоставляет очень простой способ сериализации или десериализации XML в Java без необходимости предоставления XSD (что, как я полагаю, потребуется JAXB).

0 голосов
/ 30 октября 2012

Взгляните на ReXSL , инфраструктуру веб-разработки, которая интегрирует JAXB и XSL поверх JAX-RS.Сайт генерирует каждую страницу как JAXB-аннотированный объект, который конвертируется в XML платформой.Затем этот XML доставляется в браузер с приложенной таблицей стилей XSL.

...