Я не думаю, что это возможно в JAXB, без написания некоторого пользовательского Java или XSLT.
JAXB не очень хорош в отображении между объектами и xml, которые имеют различную структуру, как ваша. Кроме того, упорядочение старой книги относительно новых книг в XML будет потеряно при преобразовании в два отдельных списка в Java, и JAXB обычно хочет сохранить информацию.
Следующее не отвечает на ваш вопрос, но, возможно, это шаг к тому, что вы хотите:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookShelf" type="BookShelf"/>
<xs:complexType name="BookShelf">
<xs:sequence>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="newBook" minOccurs="0" type="xs:string"/>
<xs:element name="oldBook" minOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:schema>
Я не пробовал это с JAXB, но думаю, что он сгенерирует список класса с двумя полями, newBook и oldBook . Таким образом, вам не нужно приводить или использовать instanceof, но вы можете просто проверить на null, чтобы увидеть, какой это. Как я уже сказал, это не решение, но, возможно, немного ближе.