【发布时间】:2010-11-10 22:32:31
【问题描述】:
我确信这可能已经详细讨论过或之前已经回答过,但是我需要更多关于适合我的情况的最佳方法的信息...
问题:
我们有一些大型 XML 数据(从 100k 到 5MB 不等),我们需要将它们膨胀到 Java 对象中。问题是数据实际上并没有很好地映射到对象上,所以我们只需要提取数据的某些部分并创建对象。鉴于此,JAXB 或 XStream 等解决方案确实不合适。
因此,我们需要将 XML 数据提取出来,并尽可能高效地将其放入 java 对象中。
可能的解决方案:
在我看来,我们有 3 种可能的解决方案:
- SAX 解析
- DOM 解析
- XSLT
我们可以将 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 代码中的?
【问题讨论】:
-
在下面查看我的答案。解析几个字段的 XPath 通常确实非常简单,而且通常非常快。
-
XSLT 使用 XML 树,因此它使用一些 DOM 提供程序。但是在这里,您必须测量“普通”DOM 实现和转换的焦点语言之间的性能(和开发时间)...... XSLT 也可以与 SAX 和流式处理(检查 Saxon XSLT 处理器)一起使用。我认为您可以从这个链开始,然后使用一些桥接器,这样流式传输的结果将直接提供一些 SAX,以便使用众所周知的 XML-Java 对象库。
-
@vtd-xml-author - JAXB 是一种无模式数据绑定技术。仅仅因为您可以使用 JAXB 从模式生成对象模型,并不意味着您也可以。您发布的文章还错误地将 Castor 描述为需要架构。
标签: java xml performance xslt