博客刚开张,里面的东西还比较少,就把原来的一些学习笔记搬上来吧。
首先说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可以做基础性的参考
dom4j 包含例子 各种增删改查
QT_DOM方式操作xml文件增删改查 博文参考: https://txwtech.blog.csdn.net/article/details/126321336?spm=1001.2014.3001.5502
XML在我们的程序中用到的越来越多,因为它存储、读取、修改都比较方便。本例是就是对Xml的增删改查...
使用Dom4j对XML文档做增删改查,其中XML充当数据库角色,案例使用分层思想
Java用dom4j对xml进行增删改查操作,提供这个资料给大家参考。
编写Web应用程序(JavaEE平台上的应用,能够运行在Tomcat服务器上),实现学生信息的增删改查。 在Web页面上实现添加一个学生记录,删除某个学生记录,修改某个学生记录,和按照姓名,学号进行查询。 要求列表输出...
Dom操作xml文件,增删改查的操作,三层架构设计,servlet,过滤器,利用单例模式开发
该文件是一页完整代码,它是使用dom4j对xml的解析,对xml的增删改差
使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点
使用的是DOM4J写的很齐全的XML增删改查,很适合入门学习
通过dom4j对xml进行增删查改,希望可以帮助到不会的朋友!
主要介绍了JavaScript 实现HTML DOM增删改查操作,结合实例形式分析了JavaScript针对HTML DOM元素增删改查常见操作技巧与使用注意事项,需要的朋友可以参考下
采用DOM4j解析器实现对公交站点信息的遍历和增删改查操作
java调用oracle存储过程入门实例 增删改查 使用dom4j读取数据库的配置文件(xml) jdbc中connection的管理 使用threadlocal
基于BootStrap和SpringBoot的学生信息管理系统,支持增删改查等基础操作,适合个人web开发学习,毕业设计或课设等 以 Maven 架构项目,使用 JSP + Servlet 开发以及 Spring + SpringMVC + MyBatis 框架;采用 c3p0 ...
原生JavaScript,对数据表格进行操作,使用DOM实现数据的动态操作,包括增加、删除、查询、修改。
DOM4J jar包 所有的包 xml解析 dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1 导入直接使用
一个用于阅读XML 内容的JAVA程序,实现了对XML文件的增删改查!