【问题标题】:Difference between UnMarshaller and Parser in JAXBJAXB 中 UnMarshaller 和 Parser 的区别
【发布时间】:2013-07-19 21:23:41
【问题描述】:

谁能解释一下 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 xml-parsing jaxb unmarshalling domparser


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      解析器只能让你以文本的形式访问 XML 内容,你不能赋予元素额外的意义。

      【讨论】:

        猜你喜欢
        • 2019-04-13
        • 2014-12-26
        • 1970-01-01
        • 2022-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        相关资源
        最近更新 更多