使用DOM4J解析XML文档,以及使用XPath提取XML文档
使用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文档的更多相关文章
- XPath提取xml文档数据
package itcast.dom4j; import java.io.File; import org.dom4j.Document; import org.dom4j.DocumentExcep ...
- XML案例(使用DOM4J解析XML文档)
1.Demo1.java package cn.itcast.dom4j; import java.io.File;import java.io.FileOutputStream;import jav ...
- dom4j解析xml时取消DTD验证
解决方式整合一下,就分两种: 1.用setFeature() SAXReader reader = new SAXReader();reader.setValidation(false); reade ...
- 2.4 使用 xpath 对xml 进行解析
public class Demo1 { /** * XPath提取XML文档数据 * xpath很强大 用来提取xml文档数据非常方便 * @throws Exception */ public s ...
- 使用dom4j解析XML文档
dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...
- DOM4J解析XML文档
Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- 源生API解析XML文档与dom4j解析XML文档
一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...
- javaweb dom4j解析xml文档
1.什么是dom4j dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它 ...
随机推荐
- 在ASP.NET应用中执行后台任务
在ASP.NET应用中执行后台任务 昨天下午,在微软的MVP 2015社区大讲堂上给大家分享了一个题目:在ASP.NET应用中执行后台任务.这是一点都不高大上,并且还有点土气的技术分享.不过我相信很多 ...
- OCP-1Z0-051-题目解析-第13题
13. View the Exhibit and examine the structure of the PRODUCTS table. You need to generate a report ...
- Buildroot阅读笔记
之前有写一篇文章:http://www.cnblogs.com/tfanalysis/p/3625430.html理清如何make menuconfig的问题,现在今天在无意间多注意了一下buildr ...
- git简单教材
0)初始化 $ git config --global user.name "xxx" $ git config --global user.email "xxx@gma ...
- .NET 相依性注入
发布<.NET 依賴注入>电子书 beta 版 书籍进度 本书目前已经开始发行 beta 版,完成进度约 70%.(我希望这本书不要超过 200 页,目前看起来应该没问题.) 简介 本书内 ...
- jQuery百叶窗图片滑块
超酷的jQuery百叶窗图片滑块实现教程 今天我们要来分享一款基于jQuery的百叶窗焦点图插件,也可以说是图片滑块插件.这种jQuery焦点图插件的应用非常广泛,在早些年前,我们需要用flash ...
- Oracle单行函数笔记
Oracle中单行函数的分类:1.字符函数substr():字符串截取select substr('我爱你,你知道么?',0,4) from dual执行结果:我爱你,length函数:字符串长度se ...
- Light, more light - PC110701
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10110.html 原创:Ligh ...
- Windows窗口的创建
Windows窗口创建的基本代码: #include <Windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); i ...
- 【转】Objective-C并发编程:API和挑战
并发指的是在同一时间运行多个任务.在单核CPU的情况下,它通过分时的方式实现,如果有多个CPU可用,则是真正意义上的多个任务“并行”执行了. OS X和iOS提供了多个API支持并发编程.每个API都 ...