如何从XML反序列化Java对象?[英] How to deserialize Java objects from XML?

问题描述

我确信这可能已经详细讨论过或之前已经回答过,但是我需要更多关于适合我的情况的最佳方法的信息...

问题:
我们有一些大型 XML 数据(从 100k 到 5MB 不等),我们需要将它们膨胀到 Java 对象中.问题是数据实际上并没有很好地映射到对象上,所以我们只需要提取数据的某些部分并创建对象.鉴于此,JAXB 或 XStream 等解决方案确实不合适.

因此,我们需要将 XML 数据提取出来,并尽可能高效地将其放入 java 对象中.


可能的解决方案:
在我看来,我们有 3 种可能的解决方案:

我们可以将 XML 加载到任何 JAXP 实现中,并使用上述方法之一提取数据.


问题
我有几个问题/疑虑:

  • XSLT 在底层是如何工作的?它只是一个 DOM 解析器吗?我之所以问,是因为 XSLT 似乎是一个不错的选择,但如果它不能为我们提供比 DOM 更好的性能,我真的不想考虑它.
  • 提供 DOM、XSLT 和 SAX XML 解析器的流行库有哪些?
  • 根据您的经验,选择 DOM、SAX 或 XSLT 的原因是什么?DOM 或 XSLT 的易用性是否完全支配了 SAX 提供的性能改进?
  • 有任何基准吗?我发现的是旧的(如 8 岁).因此,我们将不胜感激最近的一些基准测试.
  • 除了上面列出的解决方案之外,还有其他我可能会遗漏的解决方案吗?


编辑:
一些澄清...您可以使用 XSLT 直接将值注入 Java 对象...它通常用于将 XML 转换为其他一些 XML,但是我是从将方法从 XSLT 调用到 java 的角度来讨论的注入价值.

我仍然不清楚 XSLT 处理器是如何工作的……它是如何将 XML 输入到您编写的 XSLT 代码中的?

推荐答案

使用 XSLT 将大型 XML 文件转换为本地域模型,该模型通过 JAXB 映射到 java 对象.

从 JDK 5+ 内置的 XML 库开始(除非您绝对需要 XSLT 2.0,在这种情况下使用 Saxon)

不要专注于 SAX/DOM 的相对性能,专注于学习如何编写 XPath 表达式和使用 XSLT,然后当且仅当您发现它有问题时才担心性能.

Eclipse XML 编辑器很不错,但如果您负担得起,请选择 Oxygen XML,它可以让您实时进行 XPath 评估.

本文地址:https://www.itbaoku.cn/post/978410.html