使用DOM4J解析XML文档

需要首先下载DOM4J工具包。这是个第三方工具包

在使用DOM4J解析的时候需要导入 DOM4J的JAR包

下载DOM4J工具包-》在MyEclipse中新建lib文件夹-》在DOM4J中导入JAR包。可以全部导入,也可以导入指定的JAR包,这里我只导入dom4j 的jar包,.--》 右键点击dom4j的jar -》 Build Path -> add to Build Path -> 看见变成奶瓶后就导入成功了

进行增删改查

文档为:

<?xml version="1.0" encoding="UTF-8"?>

<书架>
<书>
<书名 name="xxxxx">第一本书</书名>
<作者>六道01</作者>
<售价>100</售价>
</书>
<书>
<书名>第二本书</书名>
<作者>六道02</作者>
<售价>200</售价>
</书>
</书架>

程序为:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test; //使用dom4j解析XML文档
public class Demo1
{
// 读取XML第二本书的: <书名>第二本书</书名>
// 读取!!
@Test
public void read() throws Exception
{
// 获得document
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/MyBook.xml")); // 获得根节点
Element root = document.getRootElement();
// 通过elements获得 素有包含书的标签的 文档,并再获得第二个标签的书 get(1);
// 需要强转 因为通过elements获得的是list集合 里面是object 类型
Element book = (Element) root.elements("书").get(1);
// 获得书里面的内容
String value = book.element("书名").getText();
System.out.println(value); // 获得里面的属性的值
// 第一本书才有属性 所以get(0)
Element book2 = (Element) root.elements("书").get(0);
// 获得书里面的内容
String value2 = book2.element("书名").attribute("name").getValue();
System.out.println(value2); } // 写入
// 在第一本书上添加一个新的售价 :<售价> 250元 </售价>
// 写入的时候注意编码的问题 默认使用GB2312
@Test
public void add() throws DocumentException, IOException,
FileNotFoundException
{
// 获得document
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/MyBook.xml")); Element book = document.getRootElement().element("书");
book.addElement("售价").setText("250元"); // 格式化输入器。 createPrettyPrint创建漂亮的格式化输入器
OutputFormat format = OutputFormat.createPrettyPrint();
// 文档是什么类型格式化输入器就是什么类型
format.setEncoding("UTF-8"); // 更新XML文档 ,将内存中数据写入XML文档当中去
// 这里用的是字节流,用字符流的话不会查码表,如果写入和输出的编码不一样则会乱码
// 用字节流会查自己提供的码表。
XMLWriter writer = new XMLWriter(
new FileOutputStream("src/MyBook.xml"), format);
// 开始写入
writer.write(document);
writer.close(); } // 在一本书的指定的位置添加售价:<售价> 350元 </售价> 只要更改保存了所有孩子的list集合的顺序
@Test
public void add2() throws DocumentException, IOException,
FileNotFoundException
{
// 获得document
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/MyBook.xml")); // 得到书的标签
Element book = document.getRootElement().element("书");
// 将获得的书的标签存入 list集合
// list集合中的集合的样子是:[书名,作者,售价] 现在在售价前面添加售价
List list = book.elements(); // 获得售价
Element price = DocumentHelper.createElement("售价");
// 设置售价内容
price.setText("350元"); // 第二个[书名,作者,售价,售价]
list.add(2, price); // 将内存中document写入xml文档
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(
new FileOutputStream("src/MyBook.xml"), format);
// 开始写入
writer.write(document);
writer.close(); } //删除 上面add2添加的售价节点
@Test
public void delete() throws DocumentException, Exception
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/MyBook.xml")); //获得售价标签
Element price = document.getRootElement().element("书").element("售价");
//删除售价
price.getParent().remove(price); //更新XML文档
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(
new FileOutputStream("src/MyBook.xml"), format);
// 开始写入
writer.write(document);
writer.close();
} //更新数据 改变第二本书的作者
@Test
public void updata() throws Exception
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/MyBook.xml")); Element book = (Element) document.getRootElement().elements("书").get(1);
book.element("作者").setText("六道03"); //更新数据
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(
new FileOutputStream("src/MyBook.xml"), format);
// 开始写入
writer.write(document);
writer.close();
} }

****************************************************************************邪恶的分割***********************************************************************************************

下面使用XPath提取XML文档

需求:在XML文档中有用户名密码,现在编程定义用户名密码 ,测试用户名密码是否匹配,如果存在并匹配,那么打印登陆成功,如果不匹配,那么打印登陆失败。

xml文档:

<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id = "1" username = "aaa" password = "123" email="123@sina.com"/>
<user id = "2" username = "bbb" password = "456" email="456@sina.com"/>
</users>

程序:

import java.io.File;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader; public class FindUsers
{
/**
* 查找users.xml文档是否有和用户匹配的用户名和密码
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
String username = "aaa";
String password = "123"; // 检测xml文档中是否有匹配的
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/users.xml")); // 使用XPath解析XML文档, 查找用户名和密码是否相匹配
//注意在这里 等于用户名和密码时 用到单引号
Node node = document.selectSingleNode("//user[@username = '" + username
+ "' and @password = '" + password + "' ]");
if(node==null)
{
System.out.println("用户名或密码错误");
}
else
{
System.out.println("恭喜登陆成功");
} } }

使用DOM4J解析XML文档,以及使用XPath提取XML文档的更多相关文章

  1. XPath提取xml文档数据

    package itcast.dom4j; import java.io.File; import org.dom4j.Document; import org.dom4j.DocumentExcep ...

  2. XML案例(使用DOM4J解析XML文档)

    1.Demo1.java package cn.itcast.dom4j; import java.io.File;import java.io.FileOutputStream;import jav ...

  3. dom4j解析xml时取消DTD验证

    解决方式整合一下,就分两种: 1.用setFeature() SAXReader reader = new SAXReader();reader.setValidation(false); reade ...

  4. 2.4 使用 xpath 对xml 进行解析

    public class Demo1 { /** * XPath提取XML文档数据 * xpath很强大 用来提取xml文档数据非常方便 * @throws Exception */ public s ...

  5. 使用dom4j解析XML文档

    dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...

  6. DOM4J解析XML文档

    Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...

  7. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

  8. 源生API解析XML文档与dom4j解析XML文档

    一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...

  9. javaweb dom4j解析xml文档

    1.什么是dom4j dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它 ...

随机推荐

  1. hibernate之使用Annotation注解搭建项目

    之前开发都是使用xml配置来开发项目,开发起来特别繁琐 大家会发现通过注解大大简化了我们开发流程,使我们从繁琐的XML配置中解放出来. 第一步:新建一个javaweb项目.并将hibernate需要的 ...

  2. CentOs Linux 常见命令

    整理一些常用的命令(持续更新): 查看端口是否开启: netstat -an | grep prot (查看是否打开23端口) |:通道的意思,grep是指查看当前字符所在的行 LINUX通过下面的命 ...

  3. Android性能优化:谈话Bitmap内存管理和优化

    最近除了那些忙着项目开发的事情,目前正在准备我的论文.短的时间没有写博客,今晚难得想总结.只要有一点时间.因此,为了凑合用,行.唠叨罗嗦,直接进入正题. 从事Android自移动终端的发展,想必是常常 ...

  4. Pythonic论坛怪怪的’居民’显示[已解决]

    之前使用Pythonic搭建的论坛people界面显示有点问题 第一个用户不显示,问了下作者,作者回复说这个Link只有~/people/而没有用户名 就点到为止了. 按说我使用syncdb同步时注册 ...

  5. 一个可以直接使用的MsgBox基于form居中API

    可直接复制DialogBox项目(文件夹)到需要的项目中然后直接引用和using CodeProject.Dialog 已修正原作者代码错误的地方,可直接使用,VS2010测试成功 具体可以参考案例T ...

  6. C语言身份证信息查询系统(修改版)

    很久以前写了一个<C语言身份证信息查询系统>,如果你点击链接进去看了. 估计也会被我那磅礴大气的代码震惊到的,最近复习/学习文件操作,把代码改了改,算是对以前还不会文件操作的时候的愿望,哈 ...

  7. Java Persistence with MyBatis 3(中国版)

    译者的话 前段时间因为工作和学习的须要,我打算深入研究MyBatis框架.于是在网上查找关于MyBatis的教程,发现国内网上关于MyBatis的教程资料少得可怜:除了MyBatis官网上的用户使用手 ...

  8. 【蜗牛—漫漫IT路之大学篇(九) 】

    再来一篇叨叨的博客 近期,状态还是那个状态,人还是那个人. 前两天,感冒了,可能是宿舍阴面的事吧.然后,中午睡觉的时候穿着短袖披了一件外套,然后鼻子就不通气了.只是,前天晚上,我骑着崔国强的车子跑了不 ...

  9. 【SSRS】入门篇(四) -- 向报表添加数据

    原文:[SSRS]入门篇(四) -- 向报表添加数据 定义好数据集后 [SSRS]入门篇(三) -- 为报表定义数据集 ,就可以开始设计报表了,将要显示在报表的字段.文本框.图像和其他项从工具箱拖放到 ...

  10. 读书笔记—CLR via C#线程27章节

    前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...