JAXB中UnMarshaller和Parser之间的区别



有人能解释一下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内容,不能赋予元素额外的含义。

最新更新