`
yongjian1092
  • 浏览: 40785 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

dom4J的增、删、改、查操作

 
阅读更多
博客刚开张,里面的东西还比较少,就把原来的一些学习笔记搬上来吧。
     首先说Dom4j。Dom4j是什么?说直白一点就是一个用于解析XML的Java类库。官方上的介绍是:dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.
 ( Dom4j是一个易用的,开源的类库,用于处理XML、XPath和XSLT。应用于Java平台,采用Java集合框架,完全支持DOM、SAX和JAXP) 

    下载和安装Dom4j就不细说了,下载就是去Dom4j的官方网站 进行下载,安装就是把相关的Jar文件添加到项目的classPath中。这里主要说的是一些基本的应用,基本的应用掌握了,高级的应用看一下API就能知道了。
     介绍基本应用的顺序就按照“查”、“增”、“删”、“改”的顺序来(为什么要把查放在第一位?因为增、删、改都要借助于查,所以先说明一下查),和数据库 一样。其实在某些情况下XML也是可以和数据库一样储存文件的。原来在做一个项目的时候,由于信息条数固定、信息量少、改动频率少,所以就决定直接采用了 XML来储存信息而没有用数据库,结果速度不错,也还比较稳定。
 
首先使用Dom4j创建一个XML文件: 


01. publicvoidcreateXml() throwsException { 

02.      Document document = DocumentHelper.createDocument(); 

03.       // 首先创建一个根节点base 

04.      Element root = document.addElement( "base" ); 

05.      // 然后再在根节点base下面创建games子节点 

06.      Element gamesElm = root.addElement( "games" ); 

07.      // 给games节点添加一个注释 

08.      gamesElm.addComment( "我喜欢的游戏" ); 

09.      // 在games节点下,再建立game子节点 

10.      Element gameElm = gamesElm.addElement( "game" ); 

11.      // 给game节点添加两个属性:游戏名称、游戏公司 

12.      gameElm.addAttribute( "name" , "波斯王子" ); 

13.      gameElm.addAttribute( "company" , "UBISOFT" ); 

14.      

15.      // 按照上面步逐再添加两个游戏 

16.      gameElm = gamesElm.addElement( "game" ); 

17.      gameElm.addAttribute( "name" , "实况足球" ); 

18.      gameElm.addAttribute( "company" , "KONAMI" ); 

19.   

20.      gameElm = gamesElm.addElement( "game" ); 

21.      gameElm.addAttribute( "name" , "使命召唤" ); 

22.      gameElm.addAttribute( "company" , "Activision" ); 

23.   

24.      // 再增加一个author作者的子节点 

25.      Element author = gamesElm.addElement( "author" ); 

26.      // 把作者的值设置成“亚特兰蒂斯” 

27.      author.setText( "亚特兰蒂斯" ); 

28.   

29.      // 把内容写入到文件中 

30.      XMLWriter writer = newXMLWriter( newFileOutputStream( newFile( 

31.          "G:/demo.xml" ))); 

32.      writer.write(document); 

33.      writer.close(); 

34. } 

运行后在G盘就生成了一个demo.xml文件,查看其中内容:
 


01. <? xmlversion = "1.0"encoding = "UTF-8" ?> 

02. < base > 

03.      < games > 

04.          <!--我喜欢的游戏--> 

05.          < gamename = "波斯王子"company = "UBISOFT" /> 

06.          < gamename = "实况足球"company = "KONAMI" /> 

07.          < gamename = "使命召唤"company = "Activision" /> 

08.          < author >亚特兰蒂斯</ author > 

09.      </ games > 

10. </ base > 

查:
 
1.查找出我喜欢玩的游戏的名称(由于游戏名称是放在game节点的name属性中的,所以相当于查找节点的属性值)
 


01. publicvoidfindAttribute() throwsException { 

02.      /* 

03.      * SAX是Simple API for XML的简写。它和DOM 

04.      * (Document Object Model)一样,是一种解析XML文件的方案。 

05.      * Dom4j提供的SAXReader和DOMReader都可以创建一个Document。 

06.      * 那么DOM和SAX有什么不同呢? 

07.      * SAX是基于事件的API,DOM是基于树的API。 

08.      * DOM将XML的内容一次性读入内存中,然后再进行操作; 

09.      * SAX是按树型结构遍历XML文件,一次只取出节点处的内容到内存中进行操作。 

10.      */ 

11.      SAXReader reader = newSAXReader(); 

12.      /* SAXReader根据XML文件的路径创建出一个Document */ 

13.      Document document = reader.read( newFile( "G:/demo.xml" )); 

14.      /* 然后遍历Document根节点下的games节点的game子节点的name属性,得到一个List */ 

15.      List list = document.selectNodes( "//games/game/@name" ); 

16.      Iterator iter = list.iterator(); 

17.      while(iter.hasNext()) { 

18.          /* 获取name属性,然后得到属性值进行打印 */ 

19.          Attribute attribute = (Attribute) iter.next(); 

20.          System.out.println(attribute.getValue()); 

21.      } 

22. } 

2.查找出这个XML文件的作者是谁(作者是一个单独的author节点,所以相当于查找节点的值)
 


01. publicvoidfindNode() throwsException { 

02.      SAXReader reader = newSAXReader(); 

03.      Document document = reader.read( newFile( "G:/demo.xml" )); 

04.      List list = document.selectNodes( "//games/author" ); 

05.      Iterator iter = list.iterator(); 

06.      while(iter.hasNext()) { 

07.          /* 获取author节点,然后得到它的值进行打印 */ 

08.          Element element = (Element) iter.next(); 

09.          System.out.println(element.getText()); 

10.      } 

11. } 

注:在上面查找属性和节点的两个 例子中,在查找(selectNodes)的时候都有一个奇怪的表达式(//games/game/@name、//games/author)。这个表 达式就是XPath表达式。它是一门在XML文档中查找信息的表达式,用于在XML文档中通过节点和属性进行导航。
 //games/game/@name的含义就是:在根节点下的games节点的game子节点的name属性。
 //gmaes/author的含义就是:在根节点下的games节点的author子节点。 


增: 
增加一个我喜欢玩的游戏(就魔兽吧,其实准确的来说应该是DOTA)
 

01. publicvoidadd() throwsException { 

02.      SAXReader reader = newSAXReader(); 

03.      Document document = reader.read( newFile( "G:/demo.xml" )); 

04.      /* 查找games节点,然后在这个节点下添加一个game子节点 */ 

05.      List list = document.selectNodes( "//games" ); 

06.      Iterator iter = list.iterator(); 

07.      while(iter.hasNext()) { 

08.          Element gamesElm = (Element) iter.next(); 

09.          Element gameElm = gamesElm.addElement( "game" ); 

10.          gameElm.addAttribute( "name" , "魔兽" ); 

11.          gameElm.addAttribute( "company" , "暴雪公司" ); 

12.      } 

13.      XMLWriter writer = newXMLWriter( newFileOutputStream( newFile( 

14.              "G:/demo.xml" ))); 

15.      writer.write(document); 

16.      writer.close(); 

17. } 


删: 
删除一个我喜欢玩的游戏(还是魔兽吧)
 

01. publicvoidremove() throwsException { 

02.      SAXReader reader = newSAXReader(); 

03.      Document document = reader.read( newFile( "G:/demo.xml" )); 

04.      /* 查找games节点 */ 

05.      List list = document.selectNodes( "//games" ); 

06.      Iterator iter = list.iterator(); 

07.      while(iter.hasNext()) { 

08.          Element gamesElm = (Element) iter.next(); 

09.          /* 获取games节点下的所有game子节点 */ 

10.          Iterator gameElms = gamesElm.elementIterator( "game" ); 

11.          while(gameElms.hasNext()) { 

12.              Element gameElm = (Element)gameElms.next(); 

13.              /* 如果某个game子节点的name属性值是“魔兽”,则删除这个子节点 */ 

14.              if( "魔兽" .equalsIgnoreCase(gameElm.attributeValue( "name" ))) { 

15.              gamesElm.remove(gameElm); 

16.          } 

17.      } 

18. } 

19. XMLWriter writer = newXMLWriter( newFileOutputStream( newFile( 

20. "G:/demo.xml" ))); 

21. writer.write(document); 

22. writer.close(); 

23.   

24. } 


改: 
把出品商UBISOFT改成中文 – 育碧公司
 

01. publicvoidtest2() throwsException { 

02.      SAXReader reader = newSAXReader(); 

03.      Document document = reader.read( newFile( "G:/demo.xml" )); 

04.      /* 查找所有的company属性 */ 

05.      List list = document.selectNodes( "//games/game/@company" ); 

06.      Iterator iter = list.iterator(); 

07.      while(iter.hasNext()) { 

08.          Attribute attribute = (Attribute) iter.next(); 

09.          /* 如果company的属性值为“UBISOFT”,那么则把这个属性值重置为“育碧公司” */ 

10.          if( "UBISOFT" .equalsIgnoreCase(attribute.getValue())) { 

11.              attribute.setValue( "育碧公司" ); 

12.          } 

13.      } 

14.   

15.      XMLWriter writer = newXMLWriter( newFileOutputStream( newFile( 

16.              "G:/demo.xml" ))); 

17.      writer.write(document); 

18.      writer.close(); 

19. } 

另外如果要得到根节点,就不能使用XPath表达式了。因为如果使用XPath表示根节点就是“//”,这是不允许的,会出现异常。而且也没有必要这么麻烦,直接document.getRootElement()就行了。
 还可以得到XML文件的一些基本属性。比如:XML文件编码 – document.getXMLEncoding()、XML源文件 – document.asXML()、节点起始位置 – document.getPath()。
 
以上是我在学习中的一点笔记,可能有不准确的地方,大家兼听慎取

分享到:
评论

相关推荐

    dom4j解析xml文件(增删改查)

    在“dom4j解析xml文件(增删改查)”这个主题中,我们将深入探讨如何使用DOM4J来实现XML文档的四种基本操作:增加元素、删除元素、更新元素内容以及查询元素。 首先,让我们了解DOM4J的基本用法。在解析XML文件时,...

    dom4j操作xml的增删改查

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而灵活的方式来解析、创建、修改和查询XML文档,是Java开发中的一个常用...通过实践这些基本操作,开发者可以轻松地在自己的项目中实现XML的增删改查功能。

    dom4j 包含例子 各种增删改查

    这个压缩包包含了DOM4J的1.6.1版本,以及相关的示例代码,展示了如何进行XML的各种操作,如增、删、改、查(CRUD)。 在XML CRUD操作中,"Create"代表创建XML文档。DOM4J允许开发者动态地创建XML结构。例如,可以...

    用dom4j对xml进行增删改查操作参考资料

    它提供了简单而直观的API,使得在Java中对XML进行增删改查变得容易。本文将详细介绍如何使用DOM4J进行XML的操作。 首先,我们需要理解XML的基本概念。XML(可扩展标记语言)是一种用于存储和传输数据的标准格式,它...

    使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点

    在本教程中,我们将深入探讨如何使用DOM4J来执行基本的XML操作,包括添加元素、修改元素、删除元素以及获取元素节点。 1. **添加元素节点** 在DOM4J中,添加元素节点通常涉及创建一个新的`Element`对象,然后将其...

    Xml完全操作 XML增删改查

    在Java中,我们可以使用DOM(Document Object Model)解析器将整个XML文档加载到内存中的树形结构中,便于遍历和操作。另一种解析方式是SAX(Simple API for XML),它采用事件驱动模型,逐行处理XML,节省内存但不...

    Dom4j对xml文件做增删改查(使用分层思想)

    在这个案例中,我们将深入探讨如何利用Dom4j实现XML文档的增删改查操作,并遵循分层架构的思想来组织代码。 **一、Dom4j解析XML** 1. **解析XML文档**:Dom4j通过`DocumentBuilderFactory`和`DocumentBuilder`来...

    JAVA 操作 XML 增删改查

    JAVA作为一款跨平台的编程语言,提供了丰富的API来操作XML,本篇将重点讲解如何使用JAVA进行XML的增删改查操作。 首先,从"JAVA 操作 XML 增删改查"这个标题来看,我们可以预知内容将涵盖XML文件的基本操作。这些...

    java大作业,实现学生信息增删改查

    编写Web应用程序(JavaEE平台上的应用,能够运行在Tomcat服务器上),实现学生信息的增删改查。 在Web页面上实现添加一个学生记录,删除某个学生记录,修改某个学生记录,和按照姓名,学号进行查询。 要求列表输出...

    java xml增删改查多种方法

    4. **XML的增删改查** - **增加**:可以创建新的`Element`并添加到现有结构中,或者通过`XMLStreamWriter`的`writeStartElement`和`writeEndElement`方法动态生成元素。 - **删除**:DOM中找到要删除的`Element`,...

    公交站点信息的增删改查操作

    在本项目中,我们关注的是如何利用DOM4j解析器来处理公交站点信息的增删改查操作。DOM4j是Java中一个非常流行的XML处理库,它提供了丰富的API来操作XML文档,包括读取、修改、创建和解析。 首先,DOM4j的工作原理是...

    XML实现的增删改查(CRUD)功能实例

    在这个"XML实现的增删改查(CRUD)功能实例"中,我们将深入探讨如何使用DOM4J库来执行这些基本操作。 1. **增加(Create)**: 在XML中添加新的元素或属性属于创建操作。DOM4J提供了Element类,可以用来创建新的节点...

    dom4j的Java工程

    在这个“dom4j的Java工程”中,我们可以看到一个示例项目,展示了如何利用DOM4J库进行XML文件的增、删、改、查操作。 首先,让我们深入了解DOM4J的基本概念。DOM4J采用了Document Object Model (DOM)接口,但它的...

    Java使用dom4j实现对xml简单的增删改查操作示例

    在Java中,DOM(文档对象模型)是一种常用的...以上就是在Java中使用dom4j实现对XML文件进行简单增删改查操作的方法和技巧。在实际开发中,还需要注意文件读写的权限、异常处理机制、以及操作XML的效率和安全性等问题。

    DOM与DOM4J的实战操作

    在增删改查操作中,代码示例首先是“删除”操作: ```java public static void delete() throws Exception { // 解析对象工厂 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 获取解析...

    dom4j最新版,及其i增删改

    在本文中,我们将深入探讨DOM4J的最新版本及其在XML文档中的增删改查操作。 DOM4J的核心特性包括: 1. **解析XML**:DOM4J提供了多种解析XML的方式,如SAX和DOM。SAX解析器是事件驱动的,适合处理大型XML文件,而...

    java使用DOM4J对XML文件进行增删改查操作

    Java 使用 DOM4J 对 XML 文件进行增删改查操作 概述: 本文主要介绍了 Java 使用 DOM4J 对 XML 文件进行增删改查操作的详细过程,包括读取、修改、删除和添加元素的操作。 DOM4J 是一个 Java 库,用于解析和操作 XML...

    Xml_Factory.zip_factory_sax_xml的增删改查

    DOM4J在实现XML的增删改查时,代码通常更为简洁和直观。 在实现XML的增删改查功能时,通常需要以下步骤: - 增加:创建新的XML元素,插入到合适的父元素下。 - 删除:找到要删除的元素,然后从其父元素的子节点...

    dom4j-1.6.1.jar.zip

    通过这些接口,开发者可以方便地进行XML元素的增删改查。 4. **XPath支持**:DOM4J支持XPath表达式,可以通过简洁的语句选取XML文档中的节点,极大地提高了代码的可读性和效率。 5. **转换和序列化**:DOM4J能够将...

Global site tag (gtag.js) - Google Analytics