JAXB中UnMarshaller和Parser之间的区别

时间:2013-07-19 21:23:41

标签: xml xml-parsing jaxb unmarshalling 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>

使用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);

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

“Unmarshal”从XML数据创建您选择的类的对象图表;它类似于读取序列化对象。

解析器只允许您以文本形式访问XML内容,不能赋予元素额外的含义。