4

谁能解释一下 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>

使用解组器,

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);
4

2 回答 2

6

您的两个示例都将解析 XML 作为第一步。他们在接下来发生的事情上有所不同。“解组器”将解析器的输出转换为类定义与 XML 结构匹配的 Java 对象。第二个示例将解析器的输出转换为 XML 的直接树表示。

术语“解析器”在 XML 世界中被大量滥用。它经常用于描述一旦数据被解析就处理数据的应用程序,而不仅仅是解析器组件本身。在您的情况下,您将 (parser plus unmarshaller) 与 (parser plus tree builder) 进行比较。

于 2013-07-20T13:58:16.600 回答
2

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

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

于 2013-07-19T21:34:34.047 回答