JAXB中UnMarshaller和Parser之间的区别

pan*_*eis 3 xml jaxb unmarshalling xml-parsing domparser

任何人都可以在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>
Run Code Online (Sandbox Code Playgroud)

使用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();
Run Code Online (Sandbox Code Playgroud)

使用解析器:

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

Mic*_*Kay 5

您的示例都涉及解析XML作为第一步.他们接下来会发生什么不同."unmarshaller"将解析器的输出转换为Java对象,其类定义与XML的结构相匹配.第二个示例将解析器的输出转换为XML的直接树表示.

术语"解析器"在XML世界中被滥用.它经常用于描述在解析数据后处理数据的应用程序,而不仅仅是解析器组件本身.在您的情况下,您将(解析器加unmarshaller)与(解析器加树构建器)进行比较.