jjzjj

xml - 关于Java 6中xml处理的教程

coder 2024-06-29 原文

我对Java、XPath、SAX、DOM、DoButuBuffDebug……中的所有XML处理方法有点迷惑……不同的嗡嗡声,我看不出它们是如何关联的……
1)所以我想我的问题是
有人知道在Java 6中处理XML的好教程吗?,我找到了一些,但它们看起来很旧。
2)我需要遍历一个XML树,这意味着要了解它的不同节点并能够从中获取数据,什么是最好的方法?
谢谢
任何链接都将不胜感激

最佳答案

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为您抽象了这个过程,它可以帮助您避免xml文档中的许多杂音,特别是当您需要一个较大文档的子集时。
最后,在Java中,有一种称为“JAXB”的技术,它是XML绑定技术。这用于将Java类映射到XML。您将系统指向一个XML文档,然后返回Java类。或者,在系统中指向Java类实例,并且可以返回XML。对于基本情况,我发现JAXB非常容易使用,特别是当我对Java类和结果XML都有控制时。此外,还有其他类似JAXB的第三方XML绑定系统,但JAXB附带Java 6。
至于你需要哪一个,那真的取决于你。
现在大多数人都避免使用sax,因为实际使用它有点麻烦。它速度快,价格便宜,但作为一个程序员可能很费时。
dom和xpath可能是当今最常见的技术,特别是因为它类似于现代web页面编程以及浏览器如何使用xml。如果您有更小的文档(小于50-100k),特别是如果您只需要数据的一个子集,那么dom和xpath就非常有能力并且易于使用。
如果您计划一个在更高级别上工作,并且需要处理整个文档以及读写xml,那么jaxb可能会引起兴趣。我唯一关心的是,将遗留XML文档映射到类有点复杂,而且尝试这样做可能不会获得早期的成功。
所有这些都有很好的指南,我不会提供链接。相反,您可以使用本指南将重点放在您认为最适合您的应用程序的特定XML技术上,然后从这里开始。

关于xml - 关于Java 6中xml处理的教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2081695/

有关xml - 关于Java 6中xml处理的教程的更多相关文章

  1. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  4. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  5. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  6. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  7. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  8. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  9. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  10. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

随机推荐