有人能解释一下JAXB中UnMarshaller和Parser之间的区别吗。我读到UnMarshaller被用来从XML文档中检索值。Parser也做同样的事情。任何人都请解释一下区别。
例如:考虑下面的例子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);
您的两个示例都将解析XML作为第一步。他们在接下来会发生什么方面有所不同。"解组器"将解析器的输出转换为Java对象,这些对象的类定义与XML的结构相匹配。第二个示例将解析器的输出转换为XML的直接树表示。
"解析器"一词在XML世界中被大量滥用。它通常用于描述在解析数据后处理数据的应用程序,而不仅仅是解析器组件本身。在您的案例中,您正在比较(解析器加解组器)和(解析器加树生成器)。
"Unmarshal"从XML数据中创建所选类的对象图;它类似于读取序列化对象。
解析器只允许您访问作为文本的XML内容,不能赋予元素额外的含义。