- 浏览: 271665 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
tina19890715:
非常感谢!nice!
Myeclipse校验wsdl文件不通过WS-I:(BP2406)处理办法 -
ZDbox:
你好,请问该错误真的只是由于对标题行进行了重复写数据而引起的么 ...
POI3.8 导出excel2007错误-发现不可读取的内容 -
tuxinlin317:
不太会用这几个,有什么要注意的吗?
正则表达式匹配标点符号,解决方法震撼了 -
hellodajun:
work 下面 如果没有文件,还报错呢?
Tomcat启动时出现java.io.EOFException错误的解决方法 -
trunk:
最近也在搞这个解析。我也是用自己实现resolveEntity ...
离线解析XML(不连网)出错的解决办法
这是给自己看的,但是不能设为私有。。。
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import org.apache.log4j.Logger; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class PersonDAO { private static final Logger logger = Logger.getLogger(PersonDAO.class); private Document doc; private String xmlPath = Thread.currentThread().getContextClassLoader().getResource("persons.xml").getPath(); private static final String error = "error"; private static final String success = "success"; private static PersonDAO personDAO = new PersonDAO(); private PersonDAO(){ getPersonData(); } public PersonDAO getInstance(){ return personDAO; } /** * 获取人员配置数据 * @return */ private Document getPersonData(){ if(doc == null){ //如果doc为空,读取文件 File inputXml = new File(xmlPath); SAXReader saxReader = new SAXReader(); try { doc = saxReader.read(inputXml); } catch (DocumentException e) { logger.error("读取人员配置文件错误!", e); } } return doc; } /** * 更新人员配置 * @return */ private synchronized String writePersonData(){ //TODO 希望加上备份恢复机制 try { FileOutputStream outputStream = new FileOutputStream(xmlPath); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter xmlWriter = new XMLWriter(outputStream,format); xmlWriter.write(getPersonData()); xmlWriter.close(); } catch (IOException e) { logger.error("更新人员配置文件错误!",e); return error; } return success; } /** * 判断用户名是否存在 * @param name 人员名称 * @return */ public boolean IsNameExist(String name){ //获取所有人员的名称 List<Node> nodes = doc.selectNodes("persons/person/name"); //检查新增人员的名称是否存在 Set<String> set = new HashSet<String>(); for (int i = 0; i < nodes.size(); i++) { set.add(nodes.get(i).getText()); } if(set.contains(name)){ return true; } return false; } /** * 增加人员 * @param personVO 人员信息 * @return */ public synchronized String addPerson(PersonVO personVO){ //名字不能为空 if(personVO.getName() == null){ logger.error("person's name is null"); return "name.isnull"; } try { if(IsNameExist(personVO.getName())){ logger.error("name exist"); return "name.exist"; } //创建person节点 Element person = DocumentHelper.createElement("person"); //以下是增加属性节点 name、email、phone等 if(personVO.getName() != null){ Element name = DocumentHelper.createElement("name"); name.setText(personVO.getName()); person.add(name); } if(personVO.getPhone() != null){ Element phone = DocumentHelper.createElement("phone"); phone.setText(personVO.getPhone()); person.add(phone); } if(personVO.getEmail() != null){ Element email = DocumentHelper.createElement("email"); email.setText(personVO.getEmail()); person.add(email); } if(personVO.getComment() != null){ Element comment = DocumentHelper.createElement("comment"); comment.setText(personVO.getComment()); person.add(comment); } doc.getRootElement().add(person); logger.info("增加后的xml内容:" + doc.asXML()); //更新到文件 String result = writePersonData(); return result; } catch (RuntimeException e) { logger.error("增加人员时发生异常", e); return "addperson.error"; } } /** * 修改人员信息,修改除名称以外的其他信息 * @param personVO 人员信息 * @return */ public synchronized String updatePerson(PersonVO personVO){ //名字不能为空 if(personVO.getName() == null){ logger.error("person's name is null"); return "name.isnull"; } List<Element> list = doc.selectNodes("persons/person/name"); Element nameElement = null; //找到要修改的人员的name节点 for (int i = 0; i < list.size(); i++) { if(list.get(i).getText().equals(personVO.getName())){ nameElement = list.get(i); break; } } //如果没找到,表示该人员不存在 if(nameElement == null){ return "person.notexist"; } //获取父节点 即 person节点 Element parent = nameElement.getParent(); //如果节点存在,修改属性;如果节点不存在,增加节点 Element phone = parent.element("phone"); if(phone == null){ phone = DocumentHelper.createElement("phone"); phone.setText(personVO.getPhone()); parent.add(phone); }else { phone.setText(personVO.getPhone()); } Element email = parent.element("email"); if(email == null){ email = DocumentHelper.createElement("email"); email.setText(personVO.getEmail()); parent.add(email); }else { email.setText(personVO.getEmail()); } Element comment = parent.element("comment"); if(comment == null){ comment = DocumentHelper.createElement("comment"); comment.setText(personVO.getComment()); parent.add(comment); }else { comment.setText(personVO.getComment()); } logger.info("修改后的文档: \r\n" + doc.asXML()); String result = writePersonData(); return result; } /** * 列举所有人员信息 * @return */ public List listPersons(){ List<PersonVO> list = new ArrayList<PersonVO>(); Element root = doc.getRootElement(); Iterator<Element> it = root.elementIterator(); while(it.hasNext()){ Element element = it.next(); String name = element.selectSingleNode("name").getText(); String phone = element.selectSingleNode("phone").getText(); String email = element.selectSingleNode("email").getText(); String comment = element.selectSingleNode("comment").getText(); PersonVO personVO = new PersonVO(); personVO.setComment(comment); personVO.setEmail(email); personVO.setName(name); personVO.setPhone(phone); list.add(personVO); logger.info("personVO info :"+personVO); } return list; } /** * 删除人员 * @param name 人员姓名 * @return */ public String deletePerson(String name){ //名字不能为空 if(name == null){ logger.error("person's name is null"); return "name.isnull"; } List<Element> list = doc.selectNodes("persons/person/name"); Element nameElement = null; //找到要修改的人员的name节点 for (int i = 0; i < list.size(); i++) { if(list.get(i).getText().equals(name)){ nameElement = list.get(i); break; } } //如果没找到,表示该人员不存在 if(nameElement == null){ return "person.notexist"; } //获取父节点 即 person节点 Element parent = nameElement.getParent(); boolean flag = doc.getRootElement().remove(parent);//remove只能删除直属的节点 logger.info("删除结果:"+ flag); logger.info("删除后的文档:\r\n"+ doc.asXML()); if(!flag){ return "delete.failure"; } String result = writePersonData(); return result; } public static void main(String[] args) { PersonDAO personDAO = new PersonDAO(); PersonVO personVO = new PersonVO(); personVO.setName("张三4"); personVO.setPhone("1584"); personVO.setEmail("123email"); personVO.setComment("123comment"); System.out.println(personDAO.deletePerson("张三4"));; } }
<?xml version="1.0" encoding="UTF-8"?> <persons> <person> <name>张三</name> <phone>123123123</phone> <email>123123123@qq.com</email> <comment>老大</comment> </person> <person> <name>李四</name> <phone>123123</phone> <email>123123123@qq.com</email> <comment>老二</comment> </person> <person> <name>abc</name> <phone>123123123</phone> <email>123123123@qq.com</email> <comment>老二</comment> </person> </persons>
发表评论
-
POI3.8 导出excel2007错误-发现不可读取的内容
2012-10-17 14:20 8619用POI3.8 导出excel2007,导出的excel ... -
myeclipse 不能debug
2011-08-26 17:13 1627操作系统:WIN7 64 SP1 IDE:myeclipse ... -
正则表达式匹配标点符号,解决方法震撼了
2010-06-12 17:13 30388地址:http://topic.csdn.net/u/2008 ... -
离线解析XML(不连网)出错的解决办法
2010-04-19 10:06 1485解决办法可以参见这位老兄的博客:http://tailsher ... -
form表单不提交?
2010-04-01 10:52 958原因可能是form之间嵌套了。可用察看源代码的方式检查一下 ... -
JDK java.util.logging.Logger以配置文件方式控制日志输出
2010-03-15 15:20 33521简单的实现了下利用JDK中类java.util.loggi ... -
ORA-01653(unable to extend table xx.xx by 128 in tablespace xx)问题的解决
2010-01-22 11:31 4428解决方法百度啊,放狗搜应该都能搜到,本文只是想列出一个具体的例 ... -
【转】ant执行命令的详细参数和Ant自带的系统属性
2010-01-13 08:35 1804一:ant执行命令的详细参数 -buildfile< ... -
推荐一款搜索软件everything
2009-11-10 16:39 835优点:体积小,搜索速度超快,支持过滤,正则表达式匹配等功能 ... -
Eclipse代码模板编辑
2009-11-05 18:39 2281相信大家都用过Eclipse ... -
Eclipse中ctrl+shift+F无法排版代码
2009-11-05 09:19 2021原因很可能是装了搜狗拼音输入法,搜狗的ctrl+shift ... -
windows配置oracle数据源
2009-11-03 17:32 3309纯原创,难免有纰漏,有错请拍砖。 废话:↓↓↓ <!- ... -
windows下java代码改IP
2009-09-23 16:38 1193try { Runtime .getR ... -
远程发布工程到linux
2009-07-29 09:19 1125请勿参照此过程,该过程仅为本人记录,局限性大,且没有前置的环境 ... -
发HTML邮件
2009-07-27 21:13 1193http://blog.csdn.net/zhanngle/a ... -
超链接的蓝色颜色代码
2009-07-21 13:01 1962#0000FF 模拟超链接样式的时候需要 -
对URL进行编码、解码
2009-07-20 16:56 924Java包里提供了两个类的不同方法URLEncode.en ... -
eclipse死活不编译
2009-06-29 08:48 886上周末的时候给项目svn了,因为之前很久没更新,所有对自 ... -
html 之 base
2009-06-20 16:37 858<base href=""&g ... -
JAVA命名
2009-06-09 16:44 1365参与项目了,老总提到了命名规范,上网查了下常规的规范,贴出 ...
相关推荐
dom4j读写xmldom4j读写xmldom4j读写xmldom4j读写xmldom4j读写xml
NULL 博文链接:https://sxpujs.iteye.com/blog/375485
基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。
使用dom4j对xml的读写(这个感觉比jdom功能好点,但是复杂一点点)
Dom4j 读写 XML
dom4j关于xml读写的例子里面还有dom4j的jar包,对初学者很有帮助
java中dom4j读写XML(项目中含所需要的jar包)
dom4j是非常优秀的xml解析包,操作起来读写xml非常方便。把自己写的一个读写dom4j.xml实例共享给大家
Dom4j解析教程。详细讲解如何使用dom4j解析xml,简单易懂。
java 操作XML 采用(dom+dom4j)读写源码 lib包
简单的读取xml,利用dom4j读写xml实例xmldemo
java操作xml源码 操作方式包括:dom和dom4j dom是W3C规范,比较典型的JAVA操作XML方式,适用于小型文件。 dom4j是开源的性能以及效率最好的,也是一个典型例子。...采用dom4j写xml 以及dom4j方式读XML
dom4j读写xml!例子比较简单..................................................
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...
Dom4j是一个开源的Java XML 解析处理工具,用来读写XML文件,它应用于Java平台,采用了Java集合框架并完全支持DOM, SAX和JAXP。具有性能优异、功能强大和极易使用的特点。可以作为解析XML文档析首先API。本文讲述了...
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...
总结DOM、SAX、JDOM、DOM4J读写xml文档的多种方法。
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...
使用dom4j读写XML文档 1.获取文档的根节点. Element rootElm = document.getRootElement(); 2.取得某节点的单个子节点. Element memberElm=root.element("member");// "member"是节点名 3.取得节点的文字 String ...