5

我需要查询XMLMarkLogic 服务器并将其编组为 Java 对象。什么是解决这个问题的好方法?具体来说:

  1. 使用 MarkLogic 对 XML 技术栈有任何影响吗?(也就是说,MarkLogic 是否有一些东西导致了一种不同的搜索、读取和写入 XML 片段的方法?)
  2. 我应该使用其中一个 XML API 自己处理 XML,还是有更简单的方法?
  3. 值得为此使用 JAXB 吗?

有人问了一个很好的问题,为什么我使用 Java。我正在使用Java/Java EE,因为我最擅长这种语言。这是一个人的项目,我不想被困在任何地方。该项目旨在开发 Web 服务 API 以及数据处理和转换(CSV 到 XML)功能。Java/Java EE可以很好地做到这一点,而且做得很优雅。

4

5 回答 5

3

注意: 我是EclipseLink JAXB (MOXy)的负责人,也是JAXB 2 (JSR-222)专家组的成员。

使用 MarkLogic 对 XML 技术栈有任何影响吗?(也就是说,MarkLogic 是否有一些东西导致了一种不同的搜索、读取和写入 XML 片段的方法?)

潜在的。一些对象到 XML 库比其他库支持更多种类的文档。MOXy 利用基于 XPath 的映射,使其能够处理更广泛的文档。下面是一些例子:

我应该使用其中一个 XML API 自己处理 XML,还是有更简单的方法?

使用框架通常更容易。Java SE 提供了用于处理 XML 的标准库:JAXB ( javax.xml.bind )、XPath ( javax.xml.xpath )、DOM、SAX、StAX。由于这些标准还有其他实现(即 MOXy 和 Apache JaxMe 实现 JAXB)。

值得为此使用 JAXB 吗?

是的。

于 2011-10-06T10:20:07.753 回答
2

有许多 XML-> Java 对象编组库。我认为您可能想通过搜索像这样的通用 Java XML 编组/解组问题来寻找这个问题的答案:

Java 绑定与手动定义类

尽管标题编辑有帮助,但您的用例仍然不完全清楚 - 如果您正在寻找 Java 连接,您可能还想查看http://developer.marklogic.com/code/mljam,它允许您执行 Java 代码来自 MarkLogic XQuery。

于 2011-10-06T01:23:38.190 回答
1

XQSync 为此使用XStream。据我了解,JAXB 更强大——但也更复杂。

于 2011-10-06T01:17:51.967 回答
1

使用 JAXB 解组从 XQuery 提供的 xml 已有 5 年了,我不得不说我发现它非常有用且节省时间。至于复杂性,它很容易学习和使用,可能有 90% 的用途是你将要使用的。我已经将它用于简单和复杂的模式,并发现它非常高效且节省时间。在 MarkLogic 中执行 Java 代码通常是不可能的,因为它在 Marklogic 服务器上的单独 VM 中运行,因此它实际上无法利用来自 Java EE Web 应用程序的任何会话状态或库。使用 JAXB,很容易获取结果流并将其转换为 Java 对象。我真的不能说足够多的好话。

于 2011-11-01T18:50:03.743 回答
0

使用 MarkLogic 对 XML 技术栈有任何影响吗?

不。当它从 MarkLogic 出来时,它只是可能来自任何地方的 XML。

我需要查询 XML 并将其编组为 Java 对象。

为什么?

如果您有充分的理由使用 Java,那么我们需要知道这个理由是什么,然后才能告诉您哪种 Java 技术是合适的。

如果您没有充分的理由使用 Java,那么您最好使用高级 XML 处理语言,例如 XSLT 或 XQuery。

至于 JAXB,当您的模式相当简单和稳定时,它是合适的。如果模式很复杂(例如,学术期刊文章的模式),那么 JAXB 可能会因为生成的类的数量而变得非常笨拙。使用它来处理 XQuery 输出的一个问题是 XQuery 输出很可能不符合任何已知的模式,并且 XQuery 结果的结构对于编写的每个查询都是不同的。

于 2011-10-06T08:09:38.083 回答