我对java、xpath、sax、DOM、DocumentBuilderFactory...different中的所有XML处理方法都有点迷惑,我看不出它们之间有什么关系……
1)所以我猜我的问题是,有谁知道在java6中处理XML的好教程吗?我找到了一些,但它们似乎很旧了。
2)我需要遍历xml树,这意味着要知道它的不同节点,并能够从其中获取数据,最好的方法是什么?
谢谢
任何链接都将不胜感激
发布于 2010-01-18 01:02:22
Java中有几种不同的XML技术,它们基本上都做相同的事情(提供对XML树的某种访问方式),但它们的方式大多不同。
最初的技术SAX是一种流式XML处理器。简单地说,您启动解析器,解析器在遇到各种XML元素时回调您的代码。这里的关键是它处理的是XML元素,而不是您的XML元素。也就是说,它将告诉您何时将看到新的XML元素(任何XML元素)或文本块,而不是ORDER元素或ITEM元素。SAX看到的XML只是在令牌层之上,这取决于您的程序从该树实际构建内存中的表示。
下一位是多姆。域对象模型。这是web开发人员熟悉的一种技术。它首先将整个XML文档消耗到内存中,与SAX不同,它返回对内存中模型的引用--节点和指向其他节点的指针的组合。您可以很容易地遍历DOM树来查找信息,但它是一个通用模型。DOM模型的优点是,您可以在单个表单中获得整个文档。缺点是您会以单一的形式获取整个文档。它适用于较小的文档,但对于大型文档则不是很好。
当然,这完全取决于您希望从文档中获得什么。如果您确实需要文档中的所有信息,那么您也可以将整个内容加载到内存中。如果您只需要一个子集,那么流处理器可能是更好的解决方案,特别是对于大型文档。
这两者的组合是一种称为StAX的技术,它基本上为流式XML文档提供了类似于"DOM“的视图。这意味着您可以像处理DOM文档一样处理XML文档,但是解析器将延迟加载您想要提取的信息,这在理想情况下可以降低对总体内存的影响。因此,它是上述两种技术的组合。
对于DOM和StAX,都有一种称为"XPath“的技术可用于访问数据。XPath是一种查询语言,允许您以声明的方式访问各个元素。您可以像考虑硬盘上的文件名路径一样来考虑XPath。如果没有XPath,您将需要从XML文档的根开始,然后“爬行”树以找到并提取信息。XPath为您抽象了这个过程,它可以帮助您避免文档中的许多杂乱,特别是当您想要一个更大的文档的子集时。
最后,对于Java,有一种称为"JAXB“的技术,它是一种XML绑定技术。这用于将Java类映射到XML或从XML映射。您将系统指向一个XML文档,然后就会得到Java类。或者,您将一个Java类实例指向系统,然后就可以获得XML。对于基本情况,我发现JAXB非常容易使用,特别是当我可以控制Java类和生成的XML时。此外,还有其他类似于JAXB的第三方XML绑定系统,但JAXB是Java 6附带的。
至于你需要哪一个,这真的由你自己决定。
现在大多数人都避免使用SAX,因为实际使用它有点麻烦。它速度快,成本低,但作为程序员可能会很耗时。
DOM和XPath可能是当今最常用的技术,特别是因为它类似于现代网页编程,以及浏览器处理XML的方式。如果您有较小的文档(小于50-100K),特别是如果您只需要数据的一个子集,那么DOM和XPath是非常有能力和简单易用的。
如果您计划在更高的级别上使用JAXB,并且需要处理整个文档以及读写XML,那么JAXB可能会引起您的兴趣。我唯一担心的是,将遗留XML文档映射到类有点复杂,尝试这样做可能不会取得早期的成功。
所有这些都有很好的指南,我不会提供链接。相反,您可以使用本指南将重点放在您认为最适合您的应用程序的特定XML技术上,然后从那里开始。
发布于 2010-01-24 15:25:29
现在大多数人都避免使用SAX,因为实际使用它有点麻烦。它速度快,成本低,但作为程序员可能会很耗时。
http://code.google.com/p/jlibs/wiki/SAX2JavaBinding
上面的url展示了如何在没有任何复杂性的情况下使用sax的强大功能。
https://stackoverflow.com/questions/2081695
复制相似问题