`

Dom4j的增删改查简单使用

 
阅读更多

In: Java

3 2009

博客刚开张,里面的东西还比较少,就把原来的一些学习笔记搬上来吧。
首先说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. public void createXml() throws Exception {
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 = new XMLWriter( new FileOutputStream( new File(
31. "G:/demo.xml" )));
32. writer.write(document);
33. writer.close();
34. }

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

01. <? xml version = "1.0" encoding = "UTF-8" ?>
02. < base >
03. < games >
04. <!--我喜欢的游戏-->
05. < game name = "波斯王子" company = "UBISOFT" />
06. < game name = "实况足球" company = "KONAMI" />
07. < game name = "使命召唤" company = "Activision" />
08. < author >亚特兰蒂斯</ author >
09. </ games >
10. </ base >

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

01. public void findAttribute() throws Exception {
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 = new SAXReader();
12. /* SAXReader根据XML文件的路径创建出一个Document */
13. Document document = reader.read( new File( "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. public void findNode() throws Exception {
02. SAXReader reader = new SAXReader();
03. Document document = reader.read( new File( "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. public void add() throws Exception {
02. SAXReader reader = new SAXReader();
03. Document document = reader.read( new File( "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 = new XMLWriter( new FileOutputStream( new File(
14. "G:/demo.xml" )));
15. writer.write(document);
16. writer.close();
17. }

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

01. public void remove() throws Exception {
02. SAXReader reader = new SAXReader();
03. Document document = reader.read( new File( "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 = new XMLWriter( new FileOutputStream( new File(
20. "G:/demo.xml" )));
21. writer.write(document);
22. writer.close();
23.
24. }

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

01. public void test2() throws Exception {
02. SAXReader reader = new SAXReader();
03. Document document = reader.read( new File( "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 = new XMLWriter( new FileOutputStream( new File(
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结构。例如,可以...

    Xml完全操作 XML增删改查

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

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

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

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

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

    dom4j的Java工程

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

    dom4j-1.6.1.jar.zip

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

    dom4j最新版,及其i增删改

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

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

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

    dom4j基本例子

    总的来说,这个"dom4j基本例子"涵盖了DOM4J的基本操作,包括XML的解析、元素的增删改查以及使用XPath进行查询。通过学习和理解这个例子,你可以更好地掌握DOM4J库,并将其应用到自己的XML处理任务中。如果你深入研究...

    Dom4j-XML.rar_dom4j xml

    本示例将详细介绍如何利用DOM4J进行XML文件的操作,包括创建XML文档、解析XML内容以及对XML元素的增删改查。 首先,我们需要理解XML(Extensible Markup Language)的基本概念。XML是一种自描述性的标记语言,常...

    dom4j-2.0.2

    这些类提供了丰富的API,允许开发者对XML元素进行增删改查。 3. **XPath支持**:DOM4J支持XPath,这是一种强大的查询语言,可以方便地定位XML文档中的任何节点。通过XPath表达式,开发者能快速找到所需的数据。 4....

    dom4j-1.6.1及相关使用示例

    在`使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点.html`文件中,可能详细展示了如何对XML文件进行增删改查的具体步骤和代码实例。 ### 应用场景 DOM4J广泛应用于Java项目中,特别是在处理XML配置文件、...

    dom4j-1.6.1.zip

    4. **操作XML**:通过Document对象和Element接口进行增删改查操作。 5. **输出XML**:使用XMLWriter将Document对象写回XML文件。 了解了这些基础知识后,你就可以借助DOM4J有效地在Java应用中处理XML了。无论你是...

    dom4j的属性及应用

    例如,通过Element、Attribute、Document等类,可以直接对XML元素、属性和文档进行增删改查操作。 2. **面向对象的模型**:DOM4J采用面向对象的方式来表示XML结构,使得XML文档可以被看作是一系列相互关联的对象,...

    dom4j完整jar包,包含源码

    5. 对XML节点进行增删改查操作,如添加子节点、修改属性值等。 6. 将Document对象转换回XML字符串,或者写入文件。 通过以上介绍,我们可以看出DOM4J是一个功能强大且易用的XML处理库,提供的完整Jar包包括了源码和...

    dom4j-2.1.1.jar+jaxen-1.1.6.jar.rar

    通过DOM4J,你可以创建新的XML文档,也可以读取已有的XML文件,并对其中的节点进行增删改查操作。此外,DOM4J还支持SAX和DOM两种解析模式,可以根据不同的场景选择最适合的解析方式。 接下来,我们来谈谈JAXEN。...

    用dom4j操作xml的例子

    XML(eXtensible Markup Language)是...通过熟悉这些基本操作,您可以轻松地在实际项目中实现XML的增删改查功能。在提供的"dom4j实例.pdf"文件中,您应该能找到更详细的代码示例和解释,帮助您进一步掌握DOM4J的使用。

Global site tag (gtag.js) - Google Analytics