1.使用dom4j支持xpath的操作(xpath可以直接获取到某个元素)

  (1)第一种形式

    /AAA/DDD/BBB:表示一层一层的,AAA下面DDD下面的BBB元素

  (2)第二种形式

    //BBB:表示获取所有元素名字是BBB的元素

  (3)第三种形式

    /*:获取所有的元素

  (4)第四种形式

    BBB[1]:表示获取第一个BBB元素

    BBB[last()]:表示获取最后一个BBB元素

  (5)第五种形式

    //BBB[@id]:表示获取所有名字是BBB并且元素上面有id属性的元素

  (6)第六种形式

    //BBB[@id='b1']:表示获取所有名字是BBB且元素上面有id属性的值b1

2.使用dom4j支持xpath具体操作

  (1)默认情况下,dom4j是不支持xpath的,如果我们要使用xpath,那么必须把包导入项目中

    包名:jaxen-1.1-beta-6.jar

    位置:我们解压后dom4j_jar包\dom4j-1.6.1\lib中

  (2)在dom4j里里面提供了两个方法,用来支持xpath

    selectNodes("xpath表达式") 获取多个元素,返回一个list<Node>集合

    selectSingNode("xpath表达式") 并获取单个元素,返回一个Element

3.下面是一个简单的查询实例

  需求:获取修改第一个name元素中的文本为老王

  xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<persion>
<one>
<id>1001</id>
<name>张三</name>
<age>18</age>
</one>
<two>
<id>1002</id>
<name>李四</name>
<age>20</age>
</two>
</persion>

  实现代码如下:

  

package Day4;

import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Demo1 {
public static void main(String[] args) throws Exception {
//获取解析器
SAXReader saxReader = new SAXReader();
//获取整个文档document
Document document = saxReader.read("src/Day4/1.xml");
//直接获取第一个name元素
Node node = document.selectSingleNode("//name[1]");
//修改name元素的值为老王
node.setText("老王");
//更新xml文件
FileOutputStream writer = new FileOutputStream("src/Day4/1.xml");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(writer, format);
xmlWriter.write(document);
xmlWriter.close();
}
}

4.简化上面的代码

  可以把获取解析器和document封装

  可以把更新代码封装

  可以xml的相对地址封装(这样便于修改xml地址文件,这样写我们就不需要在实现带码中直接修改)

代码如下:

package Day4;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Demo2 {
public static void main(String[] args) {
//获取document
Document document = GetDoument.getDocument(GetDoument.path);
//直接获取第一个name元素
Node node = document.selectSingleNode("//name[1]");
//修改name元素的值为老王
node.setText("老王");
//更新xml文件
NewXml.newXml(document, GetDoument.path);
}
} //可以把获取解析器和document封装
class GetDoument{
//封装xml文件的相对地址
public static final String path = "src/Day4/1.xml"; public static Document getDocument(String path) {
try {
//获取解析器
SAXReader saxReader = new SAXReader();
//获取整个文档document
Document document = saxReader.read(path);
return document;
} catch (DocumentException e) {
e.printStackTrace();
}
return null;
}
} //可以把更新代码封装
class NewXml{ public static void newXml(Document document,String path) {
FileOutputStream writer;
try {
writer = new FileOutputStream(path);
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(writer, format);
xmlWriter.write(document);
xmlWriter.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

8.xpath(dom4j支持的jar)的更多相关文章

  1. dom4j支持Xpath的具体操作

    ***默认情况下,dom4j不支持xpath. 如果想要使用xpath,需要引入jaxen-1.1-beta-6.jar包. 在dom4j中提供了两个方法来支持xpath. ***selectNode ...

  2. SpringBoot整合Mybatis,多数据源,事务,支持java -jar 启动.

    用了一段时间SpringBoot,之前配置MYBATIS ,在打包WAR 放到tomcat下正常,但是WAR已经过时了,现在流行直接打包JAR 丢到DOCKER 里,无奈JAR 启动的时候MAPPER ...

  3. flink如何动态支持依赖jar包提交

    通常我们在编写一个flink的作业的时候,肯定会有依赖的jar包.flink官方希望你将所有的依赖和业务逻辑打成一个fat jar,这样方便提交,因为flink认为你应该对自己的业务逻辑做好单元测试, ...

  4. SpringBoot application.yml logback.xml,多环境配置,支持 java -jar --spring.profiles.active

    趁今天有时间整理了一下 启动命令为 //开发环境 java -jar app.jar --spring.profiles.active=dev--server.port=8060 //测试环境 jav ...

  5. Springboot打包支持第三方jar

    有时候我们需要的jar在maven里不存在,需要手动引入.比如,钉钉sdk <dependency> <groupId>com.aliyun</groupId> & ...

  6. maven导入dom4j以及jaxen.jar报java.lang.UnsupportedOperationException:错误

    <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> & ...

  7. SpringBoot application.yml logback.xml,多环境配置,支持 java -jar --spring.profiles.active(转)

    趁今天有时间整理了一下 启动命令为 //开发环境 java -jar app.jar --spring.profiles.active=dev--server.port=8060 //测试环境 jav ...

  8. 简单用DOM4J结合XPATH解析XML

    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式    第一种形式   ...

  9. Java---XML的解析(2)-DOM4J解析/Xpath

    Dom4j: Dom SUN dom在加载时,将所有元素全部加载内存 DOM4j - 第三方. Dom4j是一个开源.灵活的XML API. 目前很多开源框架如struts,hibernate都使用d ...

随机推荐

  1. Jesus Is Here

    Jesus Is Here Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)To ...

  2. HDU | Friend Chains-4460 SPFA

    题目: Problem DescriptionFor a group of people, there is an idea that everyone is equals to or less th ...

  3. Android keystore 密码找回

    昨天准备给自己的应用发布一个新版本,在apk打包时,发现之前的用的keystore密码忘了. 蛋碎了一地,我把我所能想到的密码都试了一遍(注:我平常在各个门户网站注册基本上用的都是那几个字母和数字组合 ...

  4. linux之rpm软件包管理

    1.RPM包的命名规则 例如:httpd-2.2.15-15.el6.centos.1.i686.rpm httpd ·        软件包名 2.2.15        软件版本 15       ...

  5. Django 前戏

    1.web应用 web应用程序是一种可以通过web访问的应用程序.程序最大的好处就是用户很容易的访问应用程序,用户只需要有浏览器即可,不需要在安装其他的软件,应用程序有两种模式C/S,B/S C/S模 ...

  6. Angular.js路由 简单小案例

    代码案例: <html> <head> <meta charset="utf-8"> <title>AngularJS 路由实例&l ...

  7. spring4.1.8扩展实战之四:感知spring容器变化(SmartLifecycle接口)

    本章是<spring4.1.8扩展实战>的第四篇,如果业务上需要在spring容器启动和关闭的时候做一些操作,可以自定义SmartLifecycle接口的实现类来扩展,本章我们通过先分析再 ...

  8. 怎样用idhttpserver代替IIS让用户浏览html或下载文件 http://bbs.csdn.net/topics/360248674

      怎样用idhttpserver代替IIS让用户浏览html或下载文件 更多0分享到: 相关知识库: C# 虚拟现实(VR) Node.js 算法与数据结构     对我有用[0] 丢个板砖[0]  ...

  9. Python笔记(十四)_永久存储pickle

    pickle模块:将所有的Python对象转换成二进制文件存放 应用场景:编程时最好将大对象(列表.字典.集合等)用pickle写成永久数据包供程序调用,而不是直接写入程序 写入过程:将list转换为 ...

  10. Git015--标签管理

    Git--标签管理 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ...