关于java 6中xml处理的教程

关于java 6中xml处理的教程,xml,java-6,Xml,Java 6,我对java、xpath、sax、DOM、DocumentBuilderFactory中的所有XML处理方法都有点迷茫……不同的流行语,我看不出它们之间有什么关联 1) 所以我猜我的问题是 任何人都知道一个关于在Java6?中处理XML的好教程,我发现了一些,但它们似乎很旧 2) 我需要遍历xml树,这意味着要了解它的不同节点并能够从中获取数据,最好的方法是什么 谢谢 任何链接都是值得赞赏的Java中有几种不同的XML技术,它们基本上都做相同的事情(提供对XML树的某种访问方式),但它们大多以不

我对java、xpath、sax、DOM、DocumentBuilderFactory中的所有XML处理方法都有点迷茫……不同的流行语,我看不出它们之间有什么关联

1) 所以我猜我的问题是 任何人都知道一个关于在Java6?中处理XML的好教程,我发现了一些,但它们似乎很旧

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

谢谢


任何链接都是值得赞赏的

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

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

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

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

too的组合是一种称为StAX的技术,它基本上为流式XML文档提供了一个类似于“DOM”的视图。这意味着,您可以像处理DOM文档一样处理XML文档,但解析器将延迟加载您要提取的信息,这在理想情况下可以降低总体内存影响。这是上述两种技术的结合

对于DOM和StAX,有一种称为“XPath”的技术可用于访问数据。XPath是一种查询语言,允许您以声明方式访问各个元素。您可以以与在硬盘上考虑文件名路径的方式相同的方式来考虑XPath。如果没有XPath,您将需要从XML文档的根开始,并“爬网”树以获取和提取您的信息。XPath为您抽象了这个过程,它可以帮助您避免XML文档中的许多噪音,特别是当您在查找较大文档的子集时

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

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

现在大多数人都避免使用SAX,因为实际使用SAX有点痛苦。它速度快,价格便宜,但作为一名程序员可能会很耗时

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

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

所有这些都有很好的指南,我不提供链接。相反,您可以使用本指南关注您认为最适合您的应用程序的特定XML技术,并从中着手

现在大多数人都避免使用SAX,因为实际使用SAX有点痛苦。 它速度快,价格便宜,但作为一名程序员可能会很耗时

上面的url展示了如何在不增加任何复杂性的情况下使用sax的强大功能