博客刚开张,里面的东西还比较少,就把原来的一些学习笔记搬上来吧。
首先说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.
04.
Element root = document.addElement(
"base"
);
05.
06.
Element gamesElm = root.addElement(
"games"
);
07.
08.
gamesElm.addComment(
"我喜欢的游戏"
);
09.
10.
Element gameElm = gamesElm.addElement(
"game"
);
11.
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.
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.
04.
05.
06.
07.
08.
09.
10.
11.
SAXReader reader =
new
SAXReader();
12.
13.
Document document = reader.read(
new
File(
"G:/demo.xml"
));
14.
15.
List list = document.selectNodes(
"//games/game/@name"
);
16.
Iterator iter = list.iterator();
17.
while
(iter.hasNext()) {
18.
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.
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.
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.
05.
List list = document.selectNodes(
"//games"
);
06.
Iterator iter = list.iterator();
07.
while
(iter.hasNext()) {
08.
Element gamesElm = (Element) iter.next();
09.
10.
Iterator gameElms = gamesElm.elementIterator(
"game"
);
11.
while
(gameElms.hasNext()) {
12.
Element gameElm = (Element)gameElms.next();
13.
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.
05.
List list = document.selectNodes(
"//games/game/@company"
);
06.
Iterator iter = list.iterator();
07.
while
(iter.hasNext()) {
08.
Attribute attribute = (Attribute) iter.next();
09.
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是一个强大的Java库,专门用于处理XML文档。它提供了简单而灵活的方式来解析、创建、修改和查询XML文档,是Java开发中的一个常用...通过实践这些基本操作,开发者可以轻松地在自己的项目中实现XML的增删改查功能。
这个压缩包包含了DOM4J的1.6.1版本,以及相关的示例代码,展示了如何进行XML的各种操作,如增、删、改、查(CRUD)。 在XML CRUD操作中,"Create"代表创建XML文档。DOM4J允许开发者动态地创建XML结构。例如,可以...
在Java中,我们可以使用DOM(Document Object Model)解析器将整个XML文档加载到内存中的树形结构中,便于遍历和操作。另一种解析方式是SAX(Simple API for XML),它采用事件驱动模型,逐行处理XML,节省内存但不...
在本教程中,我们将深入探讨如何使用DOM4J来执行基本的XML操作,包括添加元素、修改元素、删除元素以及获取元素节点。 1. **添加元素节点** 在DOM4J中,添加元素节点通常涉及创建一个新的`Element`对象,然后将其...
它提供了简单而直观的API,使得在Java中对XML进行增删改查变得容易。本文将详细介绍如何使用DOM4J进行XML的操作。 首先,我们需要理解XML的基本概念。XML(可扩展标记语言)是一种用于存储和传输数据的标准格式,它...
在这个“dom4j的Java工程”中,我们可以看到一个示例项目,展示了如何利用DOM4J库进行XML文件的增、删、改、查操作。 首先,让我们深入了解DOM4J的基本概念。DOM4J采用了Document Object Model (DOM)接口,但它的...
通过这些接口,开发者可以方便地进行XML元素的增删改查。 4. **XPath支持**:DOM4J支持XPath表达式,可以通过简洁的语句选取XML文档中的节点,极大地提高了代码的可读性和效率。 5. **转换和序列化**:DOM4J能够将...
在本文中,我们将深入探讨DOM4J的最新版本及其在XML文档中的增删改查操作。 DOM4J的核心特性包括: 1. **解析XML**:DOM4J提供了多种解析XML的方式,如SAX和DOM。SAX解析器是事件驱动的,适合处理大型XML文件,而...
在Java中,DOM(文档对象模型)是一种常用的...以上就是在Java中使用dom4j实现对XML文件进行简单增删改查操作的方法和技巧。在实际开发中,还需要注意文件读写的权限、异常处理机制、以及操作XML的效率和安全性等问题。
总的来说,这个"dom4j基本例子"涵盖了DOM4J的基本操作,包括XML的解析、元素的增删改查以及使用XPath进行查询。通过学习和理解这个例子,你可以更好地掌握DOM4J库,并将其应用到自己的XML处理任务中。如果你深入研究...
本示例将详细介绍如何利用DOM4J进行XML文件的操作,包括创建XML文档、解析XML内容以及对XML元素的增删改查。 首先,我们需要理解XML(Extensible Markup Language)的基本概念。XML是一种自描述性的标记语言,常...
这些类提供了丰富的API,允许开发者对XML元素进行增删改查。 3. **XPath支持**:DOM4J支持XPath,这是一种强大的查询语言,可以方便地定位XML文档中的任何节点。通过XPath表达式,开发者能快速找到所需的数据。 4....
在`使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点.html`文件中,可能详细展示了如何对XML文件进行增删改查的具体步骤和代码实例。 ### 应用场景 DOM4J广泛应用于Java项目中,特别是在处理XML配置文件、...
4. **操作XML**:通过Document对象和Element接口进行增删改查操作。 5. **输出XML**:使用XMLWriter将Document对象写回XML文件。 了解了这些基础知识后,你就可以借助DOM4J有效地在Java应用中处理XML了。无论你是...
例如,通过Element、Attribute、Document等类,可以直接对XML元素、属性和文档进行增删改查操作。 2. **面向对象的模型**:DOM4J采用面向对象的方式来表示XML结构,使得XML文档可以被看作是一系列相互关联的对象,...
5. 对XML节点进行增删改查操作,如添加子节点、修改属性值等。 6. 将Document对象转换回XML字符串,或者写入文件。 通过以上介绍,我们可以看出DOM4J是一个功能强大且易用的XML处理库,提供的完整Jar包包括了源码和...
通过DOM4J,你可以创建新的XML文档,也可以读取已有的XML文件,并对其中的节点进行增删改查操作。此外,DOM4J还支持SAX和DOM两种解析模式,可以根据不同的场景选择最适合的解析方式。 接下来,我们来谈谈JAXEN。...
XML(eXtensible Markup Language)是...通过熟悉这些基本操作,您可以轻松地在实际项目中实现XML的增删改查功能。在提供的"dom4j实例.pdf"文件中,您应该能找到更详细的代码示例和解释,帮助您进一步掌握DOM4J的使用。