使用Dom4j 来创建 读取 修改 删除 打印 格式化 XML文档

import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;public class Dom4jDemo {/** Creates a new instance of Dom4jDemo */public Dom4jDemo() {}/***The method createXML*建立一个XML文档,文档名由输入属性决定filename 需建立的文件名返回操作结果*/public boolean createXML(String fileName){boolean isOk = false;//建立document对象Document doc = DocumentHelper.createDocument();//建立XML文档的根booksElement books = doc.addElement("books");books.addComment("This is a test for dom4j");//加入一行注释Element book = books.addElement("book");//加入第一个book节点book.addAttribute("show", "yes");//加入show属性内容Element title = book.addElement("title");//加入title节点title.setText("Dom4j Tutorials");//为title设置内容/**加入第二个book节点*/book = books.addElement("book");book.addAttribute("show", "yes");title = book.addElement("title");title.setText("Lucene Studing");/**加入第三个book节点*/book = books.addElement("book");book.addAttribute("show", "no");title = book.addElement("title");title.setText("Lucene in Action");/**加入owner节点*/Element owner = books.addElement("owner");owner.setText("O'Reilly");/***将doc中的内容写入xml文件中**/try{FileWriter file = new FileWriter(new File(fileName));XMLWriter writer = new XMLWriter(file);writer.write(doc);writer.close();isOk = true;}catch(Exception e){e.printStackTrace();}return isOk;}/***the method modifigXML*     如果book节点中show属性的内容为yes,则修改成no*     把owner项内容改为Tshinghua,并添加date节点*     若title内容为Dom4j Tutorials,则删除该节点*/public boolean modifigXML(String oldFileName,String newFileName){boolean isOk = false;try{SAXReader reader = new SAXReader();Document doc = reader.read(new File(oldFileName));/**修改内容之一: 如果book节点中show属性的内容为yes,则修改成no*/List list = doc.selectNodes(" /books/book/@show ");Iterator iter = list.iterator();while(iter.hasNext()){Attribute attr = (Attribute)iter.next();if(attr.getValue().equals("yes"))attr.setValue("no");}/***修改内容之二: 把owner项内容改为Tshinghua*并在owner节点中加入date节点,* date节点的内容为2004-09-11,* 还为date节点添加一个属性type*/list = doc.selectNodes("/books/owner");iter = list.iterator();if(iter.hasNext()){Element owner = (Element)iter.next();owner.setText("Tshinghua");Element date = owner.addElement("date");date.setText("2006-07-30");date.addAttribute("type", "Gregorian calendar");}/**修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点*/list = doc.selectNodes("/books/book");iter = list.iterator();while(iter.hasNext()){Element elem = (Element)iter.next();Iterator iterElem = elem.elementIterator("title");if(iterElem.hasNext()){Element remTitle = (Element)iterElem.next();if(remTitle.getText().trim().equals("Dom4j Tutorials"))elem.remove(remTitle);}}//将doc中的内容写入文件中try{FileWriter newFile = new FileWriter(new File(newFileName));XMLWriter newWriter = new XMLWriter(newFile);newWriter.write(doc);newWriter.close();}catch(Exception e){e.printStackTrace();}isOk = true;}catch(Exception e){e.printStackTrace();}return isOk;}/***the method formatXML*-------------------------*默认的输出方式为紧凑方式,默认编码为UTF-8,* 但对于我们的应用而言,一般都要用到中文,* 并且希望显示时按自动缩进的方式的显示,这就需用到OutputFormat类。*/public boolean formatXML(String fileName){boolean isOk = false;try{SAXReader reader = new SAXReader();Document doc = reader.read(new File(fileName));XMLWriter formatWriter = null;/***格式化输出,类型IE浏览一样*指定XML编码*/OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("gb2312");formatWriter = new XMLWriter(new FileWriter(new File(fileName)), format);formatWriter.write(doc);formatWriter.close();isOk = true;}catch(Exception e){e.printStackTrace();}return isOk;}/***the method readXML*/public void readXML(String fileName){try{SAXReader reader = new SAXReader();Document doc = reader.read(new File(fileName));List list = doc.selectNodes("/books/book");Iterator iter = list.iterator();while(iter.hasNext()){Element book = (Element)iter.next();Iterator title = book.elementIterator("title");if(title.hasNext()){Element elemTitle = (Element)title.next();System.out.print("Title: "+elemTitle.getText());System.out.print("   Show: "+book.attributeValue("show")+"\n");}}list = doc.selectNodes("/books/owner");iter = list.iterator();if(iter.hasNext()){Element owner = (Element)iter.next();System.out.println("Owner: "+owner.getText());System.out.println("Date: "+owner.elementText("date"));}}catch(Exception e){e.printStackTrace();}}/*Title: Dom4j Tutorials   Show: yesTitle: Lucene Studing   Show: yesTitle: Lucene in Action   Show: noOwner: O'ReillyDate: null*//***the method main*/public static void main(String[] args){long start = System.currentTimeMillis();//开始计时Dom4jDemo dom4jDemo = new Dom4jDemo();String fileName = "dom4jDemo.xml";String newFileName = "new_dom4jDemo.xml";System.out.println(fileName+"正在创建中...");boolean isOk_create = dom4jDemo.createXML(fileName);if(isOk_create) System.out.println(fileName+"创建成功!");else System.out.println("创建失败!请检查后重新再试!");System.out.println("正在更新中...");boolean isOk_modi = dom4jDemo.modifigXML(fileName, newFileName);if(isOk_modi) System.out.println("恭喜,更新完成!");else System.out.println("更新失败!请检查后重新再试!");System.out.println("正在格式化中...");boolean isOk_format = dom4jDemo.formatXML(fileName);if(isOk_format) System.out.println("恭喜,格式化完成!");else System.out.println("格式化失败!请检查后重新再试!");System.out.println("正在读取文件 "+fileName+" ...");System.out.println("------------------------------------------------");dom4jDemo.readXML(fileName);System.out.println("------------------------------------------------");System.out.println(fileName+"读取成功!");System.out.println("正在读取文件 "+newFileName+" ...");System.out.println("------------------------------------------------");dom4jDemo.readXML(newFileName);System.out.println("------------------------------------------------");System.out.println(fileName+"读取成功!");System.out.println("一共耗时: "+(System.currentTimeMillis()-start)+"毫秒!");}
}

Dom4j 解析 XML文件相关推荐

  1. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  2. 使用dom4j解析XML文件

    为什么80%的码农都做不了架构师?>>>    dom4j是一个java 的XML API,用来读写XML文件. 使用dom4j解析XML文件,首先需要在官网下载dom4j-1.6. ...

  3. Dom4j解析Xml文件,Dom4j创建Xml文件

    Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...

  4. 使用DOM4J解析XML文件代码

    DOM4J解析XML文件 public class DOM4JTest1 {public static void main(String[] args) throws DocumentExceptio ...

  5. Java中DOM4J解析xml文件浅析

      DOM4J解析它是JDOM的一种智能分支.它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持.XML Schema支持以及用于大文档或流化文档的基于事件的处理.它还提供了构建文档表 ...

  6. 一、dom4j技术--使用dom4j解析xml文件

    dom4j解析xml文件 一.导包,编写bean类和测试类 二.编码测试,通过dom4j生成bean对象 books.xml <?xml version="1.0" enco ...

  7. java jdom dom4j_Java基础系列17:使用DOM、SAX、JDOM、DOM4J解析XML文件详解

    一 简介 在Java中,可以使用多种方式来解析XML文件,其中最常见的可能就是DOM.SAX.JDOM.DOM4J这四种方式了.其中,DOM和SAX这两种解析XML文件的方式有jdk自带的API,因此 ...

  8. dom4j解析xml文件

    一.用SAXReader 方式解析:实例测试类TestXML     package *   import java.io.ByteArrayInputStream; import java.util ...

  9. Java - DOM4J解析XML文件

    文章目录 1. XML文档说明 2. XML解析 2.1 常见的解析方式 2.2 DOM4J解析xml 2.3 XPath表达式解析XML 3. 解析XML并封装到类中 4. 参考资料 1. XML文 ...

  10. java使用DOM4j解析XML文件

    1.简介 dom4j是java中的XML API,性能优异.功能强大.开放源代码. 也是所有解析XML文件方法中最常用的! 2.代码实操 准备需要j的ar包添加到lib目录下,dom4j-2.1.1. ...

最新文章

  1. 67 个节省开发者时间的实用工具、库与资源(前端向)
  2. 函数粘合云服务提供端到端解决方案
  3. mysql数据万能导入工具下载_mysql数据导入工具下载 - 数据导入工具(EMS Data Export for MySQL) v3.7.0多语特别版下载 - 第九软件网...
  4. boost::mp11::mp_map_insert相关用法的测试程序
  5. mybatis jar包_springboot2整合mybatis-plus3踩到的坑
  6. java批处理 异常处理_Java批处理教程
  7. php.ini用哪个,php.ini:哪一个?
  8. 闪灵短链-微信QQ域名防拦截系统 v1.0
  9. 数据交互什么意思_学习编程怎么样才可以不枯燥?什么是前端语言?
  10. Gentoo学习笔记
  11. 关于使用 autoFac 的注入方法
  12. 美国国际集团(AIG-American International Group)
  13. 常用医学科研软件有哪些?
  14. 金山对雅虎助手的测试报告
  15. 以Maya为引擎的小游戏:是男Yin就坚持2K帧
  16. SQLMAP参数中文详解(看过来)!
  17. neural networks logistic regression 神经网络逻辑回归
  18. 程序员python表白代码
  19. 如何零基础入门仿真 - version 2
  20. 关于计算机声音说法正确的是,realplayer插件 声音数字化|74数字化声音试题(9)

热门文章

  1. Symantec 卸载密码方法
  2. dou+账户余额怎么提现
  3. 一篇文章带你搞定19年数学建模机场出租车优化问题示例讲解含代码
  4. [MySQL光速入门]004 作业解答
  5. Windows App开发之更多技巧
  6. java毕业生设计新城街道社区的健康档案管理平台计算机源码+系统+mysql+调试部署+lw
  7. 有8匹马,只有四个赛道,如何挑出前三名?
  8. javafx 教程_JavaFX技巧6:使用透明颜色
  9. 关机程序C语言(快来整蛊你的小伙伴吧)
  10. ## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)***