相信作为一个开发人员应该对XML与JSON 非常熟悉。关于两者的介绍与区别网上已经有很多资料,java对于XML的解析也有很多工具包,主要解析的方式有三种:
1.DOM解析方式:适用于解析小型XML文件,如果操作大型XML文件,将整个Docment读入内存可能会引起内存不足。
2.SAX解析方式:对内存占用较小,适合解析大型XML文件,说白了就是扫描解析。
3.Digester/JAXB: Struts 的 XML 解析工具 Digester。
本文主要介绍dom4j的使用,dom4j中已经整合了SAX方式。使用dom4j可以应对大型XML文件的操作。对于Digester笔者没有过多的接触,这里就不做过多的说明。
下面来看dom4j的使用。
一.登录官网http://www.dom4j.org/
如果找不到下载位置可以去github下载 (http://dom4j.github.io/)
笔者使用的是1.6版本(最新版本截至发稿已更新至2.0)
二.将下载的压缩包解压。会看到(dom4j-1.6.1.jar)包,将jar包导入工程便可。
三.简单的读写操作,以下是操作代码:
public class XMLTest { String fileName = "d:/test/test.xml"; @Test public void testWriteXML(){ try { OutputFormat format = OutputFormat.createPrettyPrint();//创建格式化类 format.setEncoding("UTF-8");//设置编码 format.setIndent(true);//是否缩进 format.setNewlines(true);//是否换行 XMLWriter xmlWriter = new XMLWriter(new FileWriter(fileName), format); //如果需要设置文件编码格式,则需要使用一下方式创建writer (1) //xmlWriter = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File(fileName)), "UTF-8"), format); Document document = DocumentHelper.createDocument();//通过DocumentHelper工具类创建document Element root = document.addElement("root"); root.addElement("item").addAttribute("type", "t").addText("text"); xmlWriter.write(document); xmlWriter.close();//一定要关闭 (2) } catch (IOException e) { e.printStackTrace(); } } // @Test public void testReadXML(){//将XML文件一次性读取 SAXReader reader = new SAXReader(); try { Document document = reader.read(new FileReader(fileName)); Element root = document.getRootElement(); for(Iterator<?> i = root.elementIterator(); i.hasNext();){//遍历节点 Element ele = (Element) i.next(); System.out.println(ele.asXML()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } } @Test public void testWriteXML1(){//写入较大XML文件时,建议使用以下方式 try { OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8");//设置编码 format.setIndent(true);//是否缩进 format.setNewlines(true);//是否换行 XMLWriter xmlWriter = new XMLWriter(new FileWriter(fileName), format); Document document = DocumentHelper.createDocument();//通过DocumentHelper工具类创建document xmlWriter.write(document); Element root = document.addElement("root"); Element item = DocumentHelper.createElement("item"); xmlWriter.writeOpen(root);//准备写入 for(int i=0;i<1000000;i++){ item.addAttribute("type", "type"+i).addText("text"+i); item.setParent(root); xmlWriter.write(item);//写入节点 item.clearContent();//清空节点属性 } xmlWriter.writeClose(root);//写入完成 xmlWriter.close();//一定要关闭 } catch (IOException e) { e.printStackTrace(); } } @Test public void testSAXReader(){//扫描方式读取XML文件,需要实现ElementPath 接口,在该接口中进行逻辑处理 SAXReader reader = new SAXReader(); reader.setDefaultHandler(new ElementHandler() { @Override public void onStart(ElementPath elementPath) { Element element = elementPath.getCurrent(); if("item".equals(element.getName())){ System.out.println(element.attributeValue("type")); System.out.println(element.getText());//没有获取Text值(3) } } @Override public void onEnd(ElementPath elementPath) { Element element = elementPath.getCurrent(); if("item".equals(element.getName())){ System.out.println(element.attributeValue("type")); System.out.println(element.getText()); } } }); try { reader.read(new FileReader(fileName)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } } }
四:注意事项:
(1):生成XML文件编码,如果有中文需要注意此处配置。
(2):一定记得关闭write。
(3):ElementHandler接口,需要实现onStart(初始化操作),onEnd方法(处理逻辑),这里注意在onStart方法中将无法获得节点的Text值(可能是没有读完操作)。
注明:如果需要更详细的介绍,请参考官方文档
参考:http://www.ibm.com/developerworks/cn/xml/dm-1208gub/
相关推荐
我写的几个dom4j的入门例子,有关读和写的常见功能。
常见xml解析方法,里面含有解析需要的jar文件,SAX 解析器,
DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.
经常写代码,常见的jar我简单做了下整理,希望能给大家有所帮助。包括:ant.jar dom4j-1.6.1.jar jxl.jar mail.jar mysql-connector-java-5.0.8-bin.jar pdfbox-0.7.3.jar poi-3.5-beta1.jar
这里面是java开发常见的一些jar包,工程中导入它们可以满足很多很常见的功能的需求。希望对大家有帮助!
课时29:基于dom4j进行数据文件解析 课时30:数据层设计与实现之二级索引开发 课时31:数据层设计与实现之二级索引开发(续) 课时32:Spring集成Solrj之入门操作 课时33:Spring集成Solrj之高级操作 课时34:高亮...
XML XML语法、XML解析(SAX、DOM)、Dom4j组件、Digester组件。 熟练掌握XML语法规则;理解DOM模型;熟悉Java对XML的各种解析方式。 实训项目三:T-DMS V2项目开发 第四阶段(以T-NetCTOSS电信计费系统贯穿) ...
51. 安装常见问题 52. 编译问题 53. 使用 PHP 54. PHP 和 HTML 55. PHP 和 COM 56. PHP 和其它语言 57. 从 PHP/FI 2 移植到 PHP 3 58. 从 PHP 3 移植到 PHP 4 59. 从 PHP 4 移植到 PHP 5 60. 杂类问题 IX. 附录 A. ...
毫无疑问,jQuery给了JavaScript急需的提振,这是一门如此有用,但同时总是常常被低估的语言. 在 jQuery 粉墨登场之前,我们曾经会写出冗长的... 因为 jQuery 相对较新,大多数面试所涉及的问题都是围绕核心的 j
描述: Http_API_Tester是基于DiggerPlus上分享过的unirest的HTTP请求库实现的,它是一个常见的基于HTTP协议的接口测试需求相关的小工具及框架。...关于JAVA代码实现的接口测试工具,建议的第三方库有:dom4j(用于解
在web设计中,最常见的实现视差效果的方式是使用jQuery插件。但这种方法有一些弊端。这些插件大多都是在window对象的scroll事件上放置监听器。这会导致JavaScript需要处理大量的事件触发(处理scroll事件很容易造成...
实例105 DOM4j解析XML文件 278 实例106 JDOM解析XML文件 285 实例107 DOM解析XML文件 292 实例108 SAX解析XML文件 297 实例109 W3C解析XML文件 301 第13章 Java网络编程 306 实例110 获取IP地址和域名 306 ...
4.DOM则为脚本和对象的交流提供一个公共平台,并将结果显示在浏览器窗口。 如果任何一个部分发生错误,都不会得到正确结果。 好了,看到这里,我们已经对XML是如何工作的有一个整体的大致的概念。通过这一章的...
无状态JavaScript实用程序TL / DR:多年来,我发现使用JavaScript的工具箱... 因此,在Rails中常见的是使用Turbolinks或将DOM的一部分替换为javascript响应,例如 $ ( '.my-element' ) . replaceWith ( '<%= j
主要技术包括:JavaScript、Jquery、注解反射⼀起使⽤,XML以及XML解析、解析dom4j、jxab、jdk8.0新特性、SVN、 Maven、easyui 4. 描述如下: 前两个阶段的基础上化静为动,可以实现让我们⽹页内容更加的丰富,当然...
51. 安装常见问题 52. 编译问题 53. 使用 PHP 54. PHP 和 HTML 55. PHP 和 COM 56. PHP 和其它语言 57. 从 PHP/FI 2 移植到 PHP 3 58. 从 PHP 3 移植到 PHP 4 59. 从 PHP 4 移植到 PHP 5 60. 杂类问题 IX. 附录 A. ...
51. 安装常见问题 52. 编译问题 53. 使用 PHP 54. PHP 和 HTML 55. PHP 和 COM 56. PHP 和其它语言 57. 从 PHP/FI 2 移植到 PHP 3 58. 从 PHP 3 移植到 PHP 4 59. 从 PHP 4 移植到 PHP 5 60. 杂类问题 IX. 附录 A. ...
51. 安装常见问题 52. 编译问题 53. 使用 PHP 54. PHP 和 HTML 55. PHP 和 COM 56. PHP 和其它语言 57. 从 PHP/FI 2 移植到 PHP 3 58. 从 PHP 3 移植到 PHP 4 59. 从 PHP 4 移植到 PHP 5 60. 杂类问题 IX....