2013-07-19 4 views
3

Может кто-нибудь объяснить разницу между UnMarshaller и Parser в JAXB. Я прочитал, как UnMarshaller используется для извлечения значения из XML-документа. Парсер также делает то же самое. Любой, пожалуйста, объясните разницу.Разница между UnMarshaller и Parser в JAXB

например: рассмотрим ниже пример zoo.xml

<zoo> 
<zooName>Vandalur Zoo</zooName> 
    <zooId>12321</zooId> 
    <animals> 
    <animal> 
    <animalName>Lion</animalName> 
    <animalType>Wild</animalType> 
</animal> 

Использование UnMarshaller,

JAXBContext jaxbContext = JAXBContext 
     .newInstance("com.javapapers.xml.jaxb"); 
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
    JAXBElement<?> zoo = (JAXBElement<?>) unmarshaller 
     .unmarshal(new FileInputStream("zoo.xml")); 
    ZooInfo zooInfo = (ZooInfo) zoo.getValue(); 

Использование парсера:

File fXmlFile = new File("zoo.xml"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(fXmlFile); 

ответ

1

«Unmar shal "создает граф объектов выбранных вами классов из XML-данных; он похож на чтение сериализованного объекта.

Парсер дает вам доступ к XML-контенту в виде текста, вы не можете придавать дополнительный смысл этим элементам.

5

Оба примера включают в себя анализ XML как первого шага. Они отличаются тем, что происходит дальше. «Unmarshaller» превращает вывод парсера в объекты Java, определения классов которых соответствуют структуре XML. Второй пример превращает вывод анализатора в прямое древовидное представление XML.

Термин «синтаксический анализатор» сильно злоупотребляется в XML-мире. Это очень часто используется для описания приложения, которое обрабатывает данные после его анализа, а не только самого компонента парсера. В вашем случае вы сравниваете (парсер плюс unmarshaller) с (создателем парсера плюс дерева).

+0

Спасибо за подробное объяснение .. – pandeis