- 浏览: 276315 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 8735用POI3.8 导出excel2007,导出的excel ... -
myeclipse 不能debug
2011-08-26 17:13 1670操作系统:WIN7 64 SP1 IDE:myeclipse ... -
正则表达式匹配标点符号,解决方法震撼了
2010-06-12 17:13 30471地址:http://topic.csdn.net/u/2008 ... -
离线解析XML(不连网)出错的解决办法
2010-04-19 10:06 1532解决办法可以参见这位老兄的博客:http://tailsher ... -
form表单不提交?
2010-04-01 10:52 1043原因可能是form之间嵌套了。可用察看源代码的方式检查一下 ... -
JDK java.util.logging.Logger以配置文件方式控制日志输出
2010-03-15 15:20 33579简单的实现了下利用JDK中类java.util.loggi ... -
ORA-01653(unable to extend table xx.xx by 128 in tablespace xx)问题的解决
2010-01-22 11:31 4498解决方法百度啊,放狗搜应该都能搜到,本文只是想列出一个具体的例 ... -
【转】ant执行命令的详细参数和Ant自带的系统属性
2010-01-13 08:35 1827一:ant执行命令的详细参数 -buildfile< ... -
推荐一款搜索软件everything
2009-11-10 16:39 902优点:体积小,搜索速度超快,支持过滤,正则表达式匹配等功能 ... -
Eclipse代码模板编辑
2009-11-05 18:39 2311相信大家都用过Eclipse ... -
Eclipse中ctrl+shift+F无法排版代码
2009-11-05 09:19 2095原因很可能是装了搜狗拼音输入法,搜狗的ctrl+shift ... -
windows配置oracle数据源
2009-11-03 17:32 3344纯原创,难免有纰漏,有错请拍砖。 废话:↓↓↓ <!- ... -
windows下java代码改IP
2009-09-23 16:38 1270try { Runtime .getR ... -
远程发布工程到linux
2009-07-29 09:19 1169请勿参照此过程,该过程仅为本人记录,局限性大,且没有前置的环境 ... -
发HTML邮件
2009-07-27 21:13 1224http://blog.csdn.net/zhanngle/a ... -
超链接的蓝色颜色代码
2009-07-21 13:01 2036#0000FF 模拟超链接样式的时候需要 -
对URL进行编码、解码
2009-07-20 16:56 999Java包里提供了两个类的不同方法URLEncode.en ... -
eclipse死活不编译
2009-06-29 08:48 915上周末的时候给项目svn了,因为之前很久没更新,所有对自 ... -
html 之 base
2009-06-20 16:37 930<base href=""&g ... -
JAVA命名
2009-06-09 16:44 1438参与项目了,老总提到了命名规范,上网查了下常规的规范,贴出 ...
相关推荐
在这个实例中,我们将深入理解DOM4J库如何帮助我们处理XML文档,并通过实际操作来熟悉其核心功能。 XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。...
例子比较简单”的描述中,我们可以推断出这个压缩包包含了一些关于如何使用DOM4J进行XML读写的基本示例。以下是对这些关键知识点的详细解释: 1. **XML解析**:DOM4J支持两种解析XML文档的方式:SAX(Simple API ...
**使用DOM4J对XML的读写** DOM4J是一个非常强大的Java库,专门用于处理XML文档。它提供了丰富的API,使得XML的读取、创建、修改和解析变得简单易行。相较于JDOM,DOM4J确实提供了更多的功能,虽然在学习曲线方面...
除了基本的读写操作,DOM4J还支持XPath查询,这是一种强大的定位XML元素的方式。通过`XPathExpression`和`XPathFactory`,你可以编写XPath表达式来查找XML文档中的特定节点。例如,`//elementName`可以匹配所有名为`...
基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。
DOM4J的核心优势之一在于其丰富的接口体系,这些接口定义在`org.dom4j`包内,提供了对XML文档进行读写、查询、修改等操作的能力。 1. **Attribute**: 代表XML中的属性,可用于获取和设置属性值。 2. **Branch**: ...
在Java中,DOM4J提供了一种灵活的方式来操作XML文档,包括解析、遍历、修改节点以及序列化回XML字符串。 **DOM4J的基本概念:** 1. **Element(元素)**:XML文档中的每一个标签都是一个Element,它包含属性、文本...
总结,DOM4J作为一款强大的XML处理工具,不仅提供了丰富的API,还支持高效的读写操作和XPath查询,使得开发者能够轻松地进行XML文档的处理和操作。无论是在小型项目还是大型企业级应用中,DOM4J都是处理XML不可或缺...
导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写操作。 总之,DOM4J作为一款强大的XML处理工具,为Java开发者提供了丰富的功能和良好的性能,是处理XML文档的理想选择。无论是小型项目还是大型企业级...
如果你需要更精细地控制XML操作,如修改节点或添加新元素,DOM4J也提供了相应的API。 总结起来,DOM4J是处理XML的优秀工具,尤其适合解析具有任意深度的XML结构。通过`SAXReader`解析XML文件,`Document`和`Element...
在你的`analysisXml`示例中,很可能是通过DOM4J库读取了一个名为`dom4j.xml`的文件,分析其结构,提取或修改数据,然后再将结果写回新的XML文件。这个过程可能包括获取特定元素、遍历元素树、修改属性值,甚至可能...
DOM4J是一个非常流行的Java XML API,它扩展了DOM,提供了更方便的操作XML的功能。DOM4J不仅支持DOM,还支持SAX和STAX解析。 读取XML文件: ```java import org.dom4j.DocumentHelper; import org.dom4j.Document; ...
DOM4J是Java中一个非常优秀的XML处理库,它提供了丰富的API来处理XML文档,包括读取、写入、修改、查询等功能。本实例"xmldemo"将向我们展示如何利用DOM4J进行XML的读写操作。 首先,理解DOM4J的核心概念。DOM4J...
Dom4j解析教程。详细讲解如何使用dom4j解析xml,简单易懂。
总之,DOM4J是处理XML的强大工具,通过使用这个库,开发者可以方便地对XML进行读写、查询和修改。这个"dom4j_XML.rar"压缩包中的实例教程,对于学习和掌握DOM4J的操作技巧,无疑是一份宝贵的资源。
java操作xml源码 操作方式包括:dom和dom4j dom是W3C规范,比较典型的JAVA操作XML方式,适用于小型文件。 dom4j是开源的性能以及效率最好的,也是一个典型例子。...采用dom4j写xml 以及dom4j方式读XML
### 使用dom4j操作XML详解 #### 一、DOM4j简介与配置 **DOM4j** 是一款专为Java平台设计的开源XML解析处理工具。它的设计充分考虑了性能和易用性,同时提供了对DOM、SAX及JAXP等标准的支持,因此非常适合进行复杂...
以下是对Dom4j读写XML的详细讲解: 一、Document对象相关 1. **读取XML文件**:通过`SAXReader`实例化并调用`read()`方法,可以将XML文件读取为`Document`对象。例如: ```java SAXReader reader = new ...
### 使用dom4j读写XML文档的关键知识点 #### 一、简介与安装 - **DOM4J** 是一款用于处理XML文档的Java库,它提供了简单且强大的API来解析、创建、修改XML文档。 - 官方网站:[http://www.dom4j.org/]...