我在java,xpath,sax,DOM,DocumentBuilderFactory中的所有XML处理方法都有点迷失......不同的流行语我不明白它们之间的关系......
1)所以我猜我的问题是,任何人都知道一个关于在java 6中处理XML的好教程吗?我找到了一些,但它们似乎已经老了.
2)我需要遍历一个xml树,这意味着要知道它不同的节点,并能够从中获取数据,最好的方法是什么?
谢谢
任何链接将不胜感激
Java中有几种不同的XML技术,它们从根本上做同样的事情(提供对XML树的某种访问方式),但所有这些技术都以不同的方式进行.
原始技术SAX是一种流式XML处理器.简单地说,您启动解析器,解析器在遇到各种XML元素时对代码进行回调.这里的关键是它处理XML元素,而不是您的XML元素.也就是说,它会告诉您何时会看到新的XML元素(任何XML元素)或文本块,而不是ORDER元素或ITEM元素.SAX在令牌级别之上看到XML,由您的程序实际构建来自该树的内存表示.
接下来是DOM.域对象模型.这是Web开发人员熟悉的技术.它首先将整个XML文档都存储到内存中,与SAX不同,它返回对内存模型的引用 - 节点和指向其他节点的指针的组合.您可以轻松地遍历DOM树以查找您的信息,但它是一个通用模型.DOM模型的优点是您可以将整个文档放在一个表单中.缺点是,您可以将整个文档以单一形式获取.这对于较小的文档来说很好,对于大文档来说并不是那么好.
当然,这一切都取决于您对文档的要求.如果您确实需要文档中的所有信息,那么您也可以将整个内容加载到内存中.如果您只需要一个子集,那么流式处理器可能是更好的解决方案,特别是对于大型文档.
这也是一种名为StAX的技术,它基本上为视图提供了一个"DOM",它是一个流式XML文档.这意味着您可以像使用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的第三方XML绑定系统,但JAXB附带Java 6.
至于你需要哪一个,那真的取决于你.
今天大多数人都避免使用SAX,因为实际使用起来有点痛苦.它速度快,价格便宜,但作为程序员可能会非常耗时.
DOM和XPath可能是当今最常用的技术,特别是因为它类似于现代网页编程以及浏览器如何使用XML.如果您有较小的文档(小于50-100K),特别是如果您只需要数据的子集,则DOM和XPath非常强大且易于使用.
如果您计划在更高级别工作,并且需要使用整个文档,以及读取和写入XML,那么JAXB可能会引起关注.我唯一担心的是将遗留XML文档映射到类有点复杂,并且您可能无法在尝试这样做时获得早期成功.
所有这些都有很好的指南,我不会提供链接.相反,您可以使用本指南专注于您认为最适合您的应用程序的特定XML技术,并从那里开始.
| 归档时间: |
|
| 查看次数: |
2434 次 |
| 最近记录: |