使用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,具有性能优异.功能强大和极其易使用的特点,它 ...
随机推荐
- Python系列教程大汇总
Python初级教程 Python快速教程 (手册) Python基础01 Hello World! Python基础02 基本数据类型 Python基础03 序列 Python基础04 运算 Pyt ...
- 一道关于CSS选择器优先级的题
<span style="font-size:14px;"><html> <head> <style type="text/cs ...
- 【iOS】Xib的使用与File'Owner总结
一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描写叙述界面的. storyboard描写叙述的是比較大型的,大范围.适合描写叙述界面跳转等. 二.XIB的使用 Xib是小范 ...
- 安卓MonkeyRunner源码分析之启动
在工作中因为要追求完成目标的效率,所以更多是强调实战,注重招式,关注怎么去用各种框架来实现目的.但是如果一味只是注重招式,缺少对原理这个内功的了解,相信自己很难对各种框架有更深入的理解. 从几个月前开 ...
- PHP程序猿必备的七种武器
作为一个程序猿(又或者是程序媛),出来闯荡江湖,没有几种必杀技在手,那是肯定无法赢得江湖名声的,除了必杀技之外,武器也是很重要的,但是一把青钢剑,肯定是无法赢得万千少男少女的欢心的.就连小李飞刀,人家 ...
- SSH简介
一.什么是SSH? Secure Shell(缩写为SSH),由IETF的网络工作小组(Network Working Group)所制定:SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上 ...
- 修改MvcPager分页控件以适用Bootstrap 效果(含英文版,可下载)
软件开发分页效果必不可少,对于Asp.Net MVC 而言,MvcPager 是个不错的选择.请访问http://www.webdiyer.com/mvcpager/ 由于自带的分页样式不能和项目整体 ...
- flex 用footerdatagrid做列的汇总合计
之前用flex+c#做的一个项目中,有涉及到列的汇总计算.可以用到的方法很多,这里列举了一种,在前台flash中用footerdatagrid结合labelfunction的用法即可实现.当然,下面的 ...
- MyEclipse的真正价值——时间等于金钱
全世界成千上万的Java开发者选择MyEclipse作为首选的Eclipse IDE,甚至超过了著名的开发工具 IBM Rational和Eclipse Java. 为什么? 很简单,MyEclips ...
- 【转】Android实现推送方式解决方案
本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息. ...