使用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,具有性能优异.功能强大和极其易使用的特点,它 ...
随机推荐
- nexus私服linux搭建问题
一.最近搭建nexus私服,从官网下载下来总是报503服务器无效,很是无奈,最后在网上找到一个可以用的 收藏起来,这里给大家共享一下 下载地址:http://pan.baidu.com/s/1kT3U ...
- 使用.NET REACTOR制作软件许可证
原文:使用.NET REACTOR制作软件许可证 软件下载地址:http://www.eziriz.com/downloads.htm 做一个简单的许可证系统,下面是具体步骤: 1, OPEN AS ...
- 快速构建Windows 8风格应用11-语义缩放
原文:快速构建Windows 8风格应用11-语义缩放 本篇博文主要介绍为什么需要语义缩放.什么是语义缩放.如何构建语义缩放. 为什么需要语义缩放 如果用过Windows 8系统的开发者都知道在Win ...
- CSS3 实现六边形Div图片展示效果
原文:CSS3 实现六边形Div图片展示效果 效果图: 实现原理: 这个效果的主要css样式有: 1.>transform: rotate(120deg); 图片旋转 2.>overflo ...
- CQRS架构如何实现高性能
CQRS架构如何实现高性能 CQRS架构简介 前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺.对于这3点,我觉得很有道理. ...
- 【转】android动画之Tween动画 (渐变、缩放、位移、旋转)
原文:http://blog.csdn.net/feng88724/article/details/6318430 Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的 ...
- PHP中将内容循环出来
首先连接数据库: $myDate= @mysql_connect("localhost","root","") or die("数 ...
- .net创建并安装windows服务案例
1. 创建windows服务[引用博文]: 1. 将这个服务程序切换到设计视图2. 右击设计视图选择“添加安装程序”3. 切换到刚被添加的ProjectInstaller的设计视图4. 设置servi ...
- Coded UI Test对Webpage进行自动化测试
如何使用Coded UI Test对Webpage进行自动化测试 在Visual Studio中,Coded UI Test已经不是什么新特性了,较早版本的Visual Studio中就已经有这个 ...
- C语言指针操作
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...