- 浏览: 76544 次
- 性别:
- 来自: z驻马店
文章分类
最新评论
先来一段网上的废话:
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java
XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在
SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的
性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在
使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包,Hibernate
用它来读写配置文件。
注意,如果要使用Dom4j创建xml文档,只需要导入dom4j的jar包即可,如果要用dom4j解析xml文档,且使用xpath来解析,则需要导入jaxen-xx.xx.jar包,否则会报错。
下面来创建一个xml文档:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <books> <!--这是添加的注释--> <firstbook name="飞翔的小鸟" price="12¥"> <theauthor> <authorname>Stfen.Cofffe Orce</authorname> <otherbooks><![CDATA[《中国行》,《红花郎》,《哦哦地》...]]></otherbooks> </theauthor> </firstbook> <secondbook name="蚂蚁上树" price="23¥"> <theauthor> <authorname>Wen Jim.Sam</authorname> <otherbooks><![CDATA[《哦看看》,《亚西门》....]]></otherbooks> </theauthor> </secondbook> </books>
1.创建xml文档
package com.wang.test; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Attribute; import org.dom4j.io.OutputFormat; import java.io.FileOutputStream; import org.dom4j.io.XMLWriter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class CreateXML { //创建log4j对象 private static Log log = LogFactory.getLog(CreateXML.class); public static void main(String[] args){ //创建xml文档对象 Document document = DocumentHelper.createDocument(); // 设置文档DocType,这里为了举例,添加hibernate的DocType document.addDocType("hibernate-configuration", "-//Hibernate/Hibernate Configuration DTD 3.0//EN", "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"); //创建文档的根节点books,文档的根节点只能有一个,多加会出错 Element root = document.addElement("books"); //添加一行注释 root.addComment("这是添加的注释"); //创建根节点的一级子节点firstbook Element bookOne = root.addElement("firstbook"); //为节点firstbook添加属性 bookOne.addAttribute("name", "飞翔的小鸟"); bookOne.addAttribute("price", "12¥"); //为节点firstbook添加子节点theauthor Element authorOne = bookOne.addElement("theauthor"); //为节点theauthor添加子节点authorname Element nameOne = authorOne.addElement("authorname"); //为authornamer节点添加文本节点 nameOne.setText("Stfen.Cofffe Orce"); //为节点theauthor添加子节点otherbooks Element booksOne = authorOne.addElement("otherbooks"); //为节点othersbooks添加CDATA数据 booksOne.addCDATA("《中国行》,《红花郎》,《哦哦地》..."); /** * 第二种方法增加节点,内容,属性等。先创建节点,属性,然后使用add加入。 */ //创建节点secondbook Element bookTwo = DocumentHelper.createElement("secondbook"); //创建属性对象bookname,createAttribute的第一个参数表示该属性的拥有这者,可以写,也可为null Attribute bookname = DocumentHelper.createAttribute(bookTwo, "name", "蚂蚁上树"); //创建属性对象bookPrice Attribute bookPrice = DocumentHelper.createAttribute(bookTwo, "price", "23¥"); //将创建的属性添加到节点对象当中 bookTwo.add(bookname); bookTwo.add(bookPrice); //创建节点author Element author = DocumentHelper.createElement("theauthor"); Element authorName = DocumentHelper.createElement("authorname"); authorName.setText("Wen Jim.Sam"); Element otherbooks = DocumentHelper.createElement("otherbooks"); otherbooks.addCDATA("《哦看看》,《亚西门》...."); //将创建的节点authorName,otherbooks添加到author下 author.add(authorName); author.add(otherbooks); //将创建的节点author添加到节点bookTwo下 bookTwo.add(author); //将创建的节点bookTwo添加到根节点root下,成为其一级节点 root.add(bookTwo); // 最后将生成的文档保存到文件当中 //创建格式化类 OutputFormat format = OutputFormat.createPrettyPrint(); //设置编码格式 format.setEncoding("UTF-8"); // 创建输出流,如果此处使用Writer的类,则需要指定输入的编码格式, // 而使用OutputStream则不用指定编码格式 FileOutputStream output = null; try{ output = new FileOutputStream("D:\\books.xml"); // 创建XML输出流 XMLWriter writer = new XMLWriter(output,format); writer.write(document); writer.close(); output.close(); log.debug("xml创建完成"); }catch(Exception e){ log.error(e); } } }
2.修改xml文档。要修改,必须要找到修改的地方,也就是先解析xml文档,再修改目标。在解析xml文档时,有人会用传统的方式,也有人会用Xpath的方式,推荐使用xpath.下面贴个xpath的路径表,以供差用。
算了,发个xpath的教程地址吧:http://www.w3school.com.cn/xpath/xpath_syntax.asp
修改xml文档:
public class ChangXml { private static Log log = LogFactory.getLog(ChangXml.class); public static void main(String[] args){ // org.dom4j.io提供了两个类:SAXReader和DOMReader. // DOMReader只能一个现有的w3c DOM树构建 dom4j树,即只能从一个org.w3c.dom.Document 中构建org.dom4j.Document树; // 而SAXReader则使用 SAX解析器,从不同的输入源构建dom4j树,如可以从xml文件中读取并构建dom4j树。 //// 1:使用DOMReader解析 // DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // DocumentBuilder db = dbf.newDocumentBuilder(); // File file = new File("d:/skills.xml"); // org.w3c.dom.Document domDocument = db.parse(file); // DOMReader reader = new DOMReader(); // org.dom4j.Document document = reader.read(domDocument); // 2:使用SAXReader解析 SAXReader reader = new SAXReader(); Document document = null; try{ document = reader.read(new File("d:/books.xml")); }catch(Exception e){ log.error(e); } // 将所有的authorname元素的文本修改为"wangyinan" //根据xpath获得所有的authorname元素的文本值 //使用dom4j时调用XPath解析时, 要在项目中加入jaxen-xx.xx.jar List authorNameList = document.selectNodes("//authorname"); for(Iterator iter = authorNameList.iterator();iter.hasNext();){ Element node = (Element)iter.next(); log.debug(node.getText()); //将属性值改为“wangyinan” node.setText("wangyinan"); } // 将所有的price属性值修改50美元 List priceList = document.selectNodes("//@price"); for(Iterator iter = priceList.iterator();iter.hasNext();){ Attribute attribute = (Attribute)iter.next(); log.debug("old value="+attribute.getValue()); attribute.setValue("50美元"); } // 删除firstbook/theauthor元素下的otherbooks元素 // 由document文档对象不能直接删除节点 // Element elementOhterbooks =(Element)document.selectSingleNode("/books/firstbook//otherbooks"); // log.debug(elementOhterbooks.getText()); // document.remove(elementOhterbooks); // 元素不能删除其非直接子元素 //// Element root = document.getRootElement(); // Element firstbook = (Element)document.selectSingleNode("/books/firstbook"); // Element otherbooks = (Element)document.selectSingleNode("/books/firstbook//otherbooks"); // log.debug(otherbooks.getText()); // firstbook.remove(otherbooks); Element theauthor =(Element)document.selectSingleNode("/books/firstbook//theauthor"); Element otherbooks = theauthor.element("otherbooks"); log.debug(otherbooks.getText()); theauthor.remove(otherbooks); // 修改后,要把修改的Document保存进文件内,不保存的话,修改成功不了 // 创建格式化类 OutputFormat format = OutputFormat.createPrettyPrint(); // 设置编码格式 format.setEncoding("UTF-8"); // 创建输出流,如果此处使用Writer的类,则需要指定输入的编码格式, // 而使用OutputStream则不用指定编码格式 FileOutputStream output = null; try{ output = new FileOutputStream("D:\\books.xml"); // 创建XML输出流 XMLWriter writer = new XMLWriter(output,format); writer.write(document); writer.close(); output.close(); log.debug("chang success"); }catch(Exception e){ log.error(e); } } }
发表评论
-
java动态代理小记
2012-10-30 17:48 1154这两天没有什么工作任务,也不想去看所谓的业务,就利用闲来的时间 ... -
javascript encodURI() 和 JAVA URLDecoder.decode
2012-08-08 11:11 1444Js中 encodURI(encodURI(xxxx)),在j ... -
AOP总结
2012-05-30 08:52 962自己对AOP的总结,粘贴效果不好,就上传附件吧 -
2012-2013要读的书
2012-05-23 18:37 02012年-2013年要读的书 《thiking in ... -
关于js中"window.location.href"、"location.href"
2012-04-12 17:08 833关于js中"window.location.href ... -
javascript 两个相同的字符串,js判断却不一致
2012-04-07 18:06 4664今天做项目时遇到一个奇怪的问题,struts2+ajax,返回 ... -
debug单步调试的用法
2012-03-20 08:56 1174f5 run into 进入方法内部f6 执行下一行代码f7 ... -
dwr错误
2012-03-20 08:58 853一、dwr遇到这种错误: org.directwebremot ... -
往eclipse中导入项目
2012-03-20 08:57 40201. 怎么从svn服务器上把项目下载下来 首先新 ... -
qc错误
2012-02-07 12:37 982如果QC报出如 “在 "BEGIN-OF-STAT ... -
取表中字段值重复的一条数据
2011-12-28 17:20 1026表 t_a, 有三个字段 id,name,age 有 ... -
hibernate.current_session_context_class 错误
2011-12-27 15:24 890在使用SessionFactory的getCurrentSes ... -
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
2011-12-27 10:14 788Insert是T-sql中常用语句,Insert INTO t ... -
java多线程相关
2011-12-26 09:40 748自己写的关于java多线程方面的总结和笔记 -
Java的SPI机制
2011-12-02 15:39 689SPI的全名为Service Provider Interfa ... -
关于TomCat自动加载class问题
2011-12-01 16:49 3281每次用tomcat的时候,每当我对类做了修改必须要重新启动to ... -
Eclipse无法自动编译的问题
2011-11-21 10:37 1126今天遇到了一个小问题,就是eclipse下导入的工程都无法 ... -
struts2对AJAX的支持
2011-11-11 13:46 1478struts2确实一个非常棒的MVC框架。这里部分记述一下st ... -
转:DynaBean 的使用
2011-11-08 11:21 3960DynaBean 的使用 在正常的开发的过程 ... -
HttpSession , HttpSessionListener , HttpSessionBindingListener , HttpSessionAtri
2011-10-26 16:35 826原来我一直认为只有当 ...
相关推荐
基于springboot+Javaweb的二手图书交易系统源码数据库文档.zip
Linux课程设计.doc
课程考试资源描述 本资源是为应对各类课程考试而精心准备的综合性学习包。它包含了多门学科的考试指南、历年真题、模拟试题以及详细的答案解析。这些资源旨在帮助学生系统复习课程内容,理解考试要点,提高解题技巧,从而在考试中取得优异成绩。 资源中不仅包含了基础的考试资料,还特别加入了考试技巧讲解和备考策略分析。学生可以通过这些资源了解不同题型的解题方法和思路,学会如何在有限的时间内高效答题。此外,还有针对弱项科目和难点的专项训练,帮助学生攻克学习瓶颈。 为了确保资源的时效性和准确性,我们会定期更新考试资料和模拟试题,及时反映最新的考试动态和趋势。同时,也提供了在线交流平台,方便学生之间互相讨论、分享学习心得。 项目源码示例(简化版,Python) 以下是一个简单的Python脚本示例,用于生成包含选择题和答案的模拟试题: python import random # 定义选择题题库 questions = [ {"question": "Python的创始人是谁?", "options": ["A. 林纳斯·托瓦兹", "B. 巴纳姆", "C. 比尔·盖茨", "D.
基于 MySQL+Django 实现校园食堂点餐系统。 主要环境: PowerDesigner MySQL Workbench 8.0 CE Python 3.8 Django 3.2.8 BootStrap 3.3.7 Django-simpleui
基于SpringBoot的同城宠物照看系统源码数据库文档.zip
GEE训练教程
基于springboot+Web的心理健康交流系统源码数据库文档.zip
微信小程序 kotlin 实践微信插件助手, 目前支持抢红包(支持微信最新版本 7.0.0及7.0.3).zip
N32G45X运放电路检测电压
梦幻西游道人是梦幻西游里面的一个NPC,主要是刷全服最实惠的高级兽决和其他很好用的比较贵的东西,在长安城、傲来国、长寿村中的任意一个场景出现,一般会出现30分钟,不过东西一般都被秒刷。 梦幻西游道人出现时间解析如下: 1.梦幻西游道人出现时间一直都保持着一年出现两次的规律,即2、3月份的元宵节期间来一次,9月份的教师节期间出现一次。 2.云游道人每个整点(0:00至7:00不出现)会在长安城、傲来国、长寿村中的任意一个场景出现,每次出现后停留时间为30分钟。
tables-3.7.0-cp38-cp38-win_amd64.whl
基于springboot旧物回收管理系统源码数据库文档.zip
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 本文档介绍了MariaDB 10.1的集群部署,至少三台机器做成集群,每台可以同时提供读和写,感兴趣的小伙伴们可以参考一下
内容概要:本文档全面介绍了JavaScript作为一种轻量级的、解释型的语言及其在前端开发中的广泛应用。从JavaScript的基本概念出发,详尽讲解了基础语法(如变量、数据类型、运算符、流程控制)、函数和闭包、对象和原型、DOM操作(如获取、修改、添加和删除元素)、事件处理(如事件监听器、事件对象)、AJAX与Fetch API、ES6+的新特性(如箭头函数、模板字符串、解构赋值)以及前端框架和库(React、Vue、Angular)。除此之外,文章还涉及了代码优化技巧(如减少DOM操作、选择适当的算法和数据结构、使用工具提升代码性能),并对JavaScript的应用场景和发展趋势进行了展望。 适用人群:适用于初学者或具有少量编程经验的学习者,旨在帮助他们系统掌握JavaScript基础知识和前沿技术。 使用场景及目标:通过本教程的学习,读者不仅可以学会基本语法,还能理解并掌握高级概念和技术,如DOM操纵、事件处理机制、异步编程及最新的ECMAScript规范。这不仅有助于改善用户体验、增强网站互动性和响应速度,也能有效提升自身的编码水平和项目开发能力。 其他说明:此文档不仅涵盖了JavaScript的传统功能,还有现代前端技术和最佳实践指导,确保读者能够紧跟行业发展步伐,成为合格甚至优秀的Web开发人员。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
基于springboot高考志愿智能推荐系统源码数据库文档.zip
经典-FPGA时序约束教程
mcu交互实验整体文件
Collins COBUILD (CN).mdx
自定义springboot starter