任何人都可以在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);
答案 0 :(得分:5)
您的示例都涉及解析XML作为第一步。他们接下来会发生什么不同。 “unmarshaller”将解析器的输出转换为Java对象,其类定义与XML的结构相匹配。第二个示例将解析器的输出转换为XML的直接树表示。
术语“解析器”在XML世界中被滥用。它经常用于描述在解析数据后处理数据的应用程序,而不仅仅是解析器组件本身。在您的情况下,您将(解析器加上unmarshaller)与(解析器加树构建器)进行比较。
答案 1 :(得分:1)
“Unmarshal”从XML数据创建您选择的类的对象图表;它类似于读取序列化对象。
解析器只允许您以文本形式访问XML内容,不能赋予元素额外的含义。