2013-07-08 2 views
0

У меня есть XML-файл, который содержит массив транспортных средств, но мне нужно иметь возможность десериализовать его и принимать каждый объект и помещать его в свой собственный Автомобиль.Как десериализовать XML-файл в свой собственный уникальный класс?

Например, это то, что мой файл XML вроде выглядит следующим образом:

<Vehicle-array> 
    <Car></Car> 
    <Truck></Truck> 
    <Van></Van> 
</Vehicle-array> 

Так что мне нужно, чтобы быть в состоянии иметь элемент автомобиля десериализовать как объект Car не Vehicle объекта.

Я могу получить все Vehicle[], а каждый элемент - конкретный тип Vehicle.

ответ

1

Поместите их в массиве автомобиля, а затем просто бросить их с помощью InstanceOf

if(a instanceof Car) 
    a = (Car) a ; 
else if(a instanceof Truck) 
    ... 
+0

Я собирался сделать это так, но разве этот метод не нахмурился? – samwell

0

Вы можете использовать JAXB, но это потребует, чтобы у вас была XML-схема. Оттуда вы можете запустить xjc, чтобы сгенерировать Java-классы из схемы, а затем использовать интерфейсыи Unmarshaller для создания объектов из XML.

+1

Я думаю, что его вопрос связан с xstream (см. Тег) –

+0

@ErikPragt Хороший улов. Раньше я никогда не использовал xstream, поэтому я не могу с этим поделать. Мне было бы интересно узнать, как это может быть связано с полиморфизмом. Мне никогда не нравилось, как JAXB это сделал. – austin

+0

Я видел другие сообщения, рекомендующие JAXB, но мне нужно использовать XStream. Спасибо хоть! – samwell

0

Я думаю, вам нужно создать классы и аннотировать все классы с аннотациями @XStreamAlias, как это :

@XStreamAlias("Car") 
class Car { } 

@XStreamAlias("Truck") 
class Truck { } 

Большая часть информации содержится в the documentation. Я бы предложил сначала создать классы, а затем сериализовать XML, таким образом, легче сделать сопоставление.

+0

Я не могу изменить классы. – samwell

+0

Тогда вам, вероятно, нужно посмотреть на это: http://xstream.codehaus.org/alias-tutorial.html –

Смежные вопросы