3

我对 java、xpath、sax、DOM、DocumentBuilderFactory 中的所有 XML 处理方法有点迷失......

1)所以我猜我的问题是任何人都知道有关在 java 6 中处理 XML 的好教程?,我找到了一些,但它们似乎很旧。

2)我需要遍历一个xml树,这意味着要知道它的不同节点并能够从中获取数据,最好的方法是什么?

谢谢

任何链接将不胜感激

4

2 回答 2

6

Java 中有几种不同的 XML 技术,它们基本上都在做同样的事情(提供对 XML 树的某种访问方式),但它们的方式大多不同。

原始技术 SAX 是一种流式 XML 处理器。简单地说,您启动解析器,并且解析器在遇到各种 XML 元素时对您的代码进行回调。这里的关键是它正在处理 XML 元素,而不是您的 XML 元素。也就是说,它将告诉您何时会看到新的 XML 元素(任何 XML 元素)或文本块,而不是 ORDER 元素或 ITEM 元素。SAX 在令牌级别之上看到 XML,这取决于您的程序从该树实际构建内存中的表示。

接下来是 DOM。领域对象模型。这是 Web 开发人员熟悉的技术。它首先将整个 XML 文档消耗到内存中,并且与 SAX 不同,它返回对内存模型的引用——节点和指向其他节点的指针的组合。您可以轻松地遍历 DOM 树来查找您的信息,但它是一个通用模型。DOM 模型的优点是您可以在一个表单中获取整个文档。缺点是,您只能以单一形式获取整个文档。它适用于较小的文档,但不适用于大型文档。

当然,这完全取决于您希望从文档中获得什么。如果您确实需要文档中的所有信息,那么您不妨将整个内容加载到内存中。如果您只需要一个子集,那么流处理器可能是更好的解决方案,特别是对于大型文档。

这也是一种称为 StAX 的技术,它基本上为流式 XML 文档提供类似“DOM”的视图。这意味着您可以像使用 DOM 文档一样使用 XML 文档,但是解析器会延迟加载您想要提取的信息,这可以理想地降低整体内存影响。所以它是上述两种技术的组合。

对于 DOM 和 StAX,有一种可用于访问数据的技术,称为“XPath”。XPath 是一种查询语言,可让您以声明的方式访问各个元素。您可以像考虑硬盘上的文件名路径一样考虑 XPath。如果没有 XPath,您将需要从 XML 文档的根目录开始,然后“爬取”树以获取并提取您的信息。XPath 为您抽象了这个过程,它可以帮助避免 XML 文档的大部分噪音,尤其是当您处理较大文档的子集时。

最后,在 Java 中,还有一种称为“JAXB”的技术,它是一种 XML 绑定技术。这用于将 Java 类映射到 XML 和从 XML 映射。将系统指向一个 XML 文档,然后返回 Java 类。或者,您将一个 Java 类实例指向系统,然后您可以获取 XML。对于基本情况,我发现 JAXB 非常易于使用,尤其是当我同时控制 Java 类和生成的 XML 时。此外,还有其他类似于 JAXB 的第 3 方 XML 绑定系统,但 JAXB 随 Java 6 一起提供。

至于你需要哪一个,这完全取决于你。

今天大多数人都避免使用 SAX,因为实际使用它有点痛苦。它既快又便宜,但作为程序员可能会很耗时。

DOM 和 XPath 可能是当今最常用的技术,特别是因为它类似于现代网页编程以及浏览器如何使用 XML。如果您有较小的文档(小于 50-100K),特别是如果您只需要数据的一个子集,则 DOM 和 XPath 非常强大且易于使用。

如果您计划在更高级别上工作,并且需要处理整个文档以及读写 XML,那么 JAXB 可能会引起您的兴趣。我唯一担心的是,将遗留的 XML 文档映射到类有点复杂,而且您可能不会在尝试这样做时获得早期成功。

所有这些都有很好的指南,我不会提供链接。相反,您可以使用本指南专注于您认为最适合您的应用程序的特定 XML 技术,然后从那里开始。

于 2010-01-17T17:02:21.867 回答
0

今天大多数人都避免使用 SAX,因为实际使用它有点痛苦。它既快又便宜,但作为程序员可能会很耗时。

http://code.google.com/p/jlibs/wiki/SAX2JavaBinding

上面的 url 展示了如何在没有任何复杂性的情况下使用 sax 的力量。

于 2010-01-24T07:25:29.170 回答