使用 dom4j 处理 xml (3)
今天想在使用 dom4j 选择节点时,顺便去重,可没有单独去重的方法;倒是有一个可以去重的,还必须提供一个 xpath 作为 排序和去重 的依据。
1、xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<tasks>
<task name="work" delay="0" period="43200"></task>
<task name="sleep" delay="3600" period="43200"></task>
<task name="play" delay="120" period="604800"></task>
<task name="play" delay="120" period="604800"></task>
</tasks>
2、用到的方法及参数说明:
selectNodes 有 3 个重载方法,一个参数的、两个参数的,三个参数的。
selectNode(String xpath1, String xpath2, String boolVal)
(1)xpath1:用来在文本中选择节点,并会返回一个结果集(List<Node>)。
(2)xpath2:站在结果中某个节点的角度,指出排序和去重的依据。
(3)0boolVal: 参数为 true 时,会对选择的结果进行去重处理。
呃……似乎有点不好理解,看例子吧。
3、测试代码及结果
Document doc = new SAXReader().read(new File("src/operxml/xmlfiles/tasks.xml")); // 01、选择所有的 task 节点,按照节点的 name 属性排序,结果去重。
List<Node> tasks = doc.selectNodes("//task", "@name", true);
tasks.forEach(tn -> System.out.println(tn.asXML()));
结果:
<task name="play" delay="120" period="604800"/>
<task name="sleep" delay="3600" period="43200"/>
<task name="work" delay="0" period="43200"/>
// 02、获取所有的任务名,按任务名排序和去重
//List<Node> taskNames = doc.selectNodes("//task/@name", "@name", true); //怎么选都只有一个节点。
List<Node> taskNames = doc.selectNodes("//task/@name", "../@name", true); //结果集中的节点是 task/@name,并没有什么属性可以用来排序;可以使用其父节点(task)的 name 属性来给结果排序
taskNames.forEach(tn -> System.out.println(tn.asXML()));
结果:
name="play"
name="sleep"
name="work"
// 03、获取所有的任务名,按延迟排序和去重
List<Node> taskNames = doc.selectNodes("//task/@name", "../@delay", true); // 第二个参数作为排序依据、去重依据(很明显是根据 delay 排序的;与 02 相比较:02 中 name 有相同的,去重后只剩一个,03 中delay 各不相同。)
taskNames.forEach(tn -> System.out.println(tn.asXML()));
结果:
name="work"
name="play"
name="play"
name="sleep"
使用 dom4j 处理 xml (3)的更多相关文章
- 使用dom4j读取xml连接数据库与之单例模式
使用dom4j读取xml ,加入jar包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar public class XmlConfigReader { //懒汉式,延迟加载 ...
- Dom4j把xml转换成Map(固定格式)
/** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...
- 【dom4j xml】使用dom4j处理XML文件--测试过程遇到的问题
首先 关于dom4j的API,有如下: 当然 其中的实体引用有以下: 测试使用环境: 使用Maven搭建web环境,pom.xml文件配置如下: <project xmlns="ht ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- 转:在java中使用dom4j解析xml
JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...
- Dom4j解析xml
public class Dom4jTest { // Dom4j解析xml // 因为所有的方法都需要Dom树 static Document document = null; static Ele ...
- 使用Dom4j进行XML解析
1 概述 在进行ESB集成项目中,使用到了很多系统的接口,这些接口传输的数据大部分都采用了XML的格式,这样在使用ESB开发服务时就需要对XML数据进行解析或拼接的操作,本文以项目中流程服务为例,讲 ...
- 使用dom4j解析XML文档
dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
- 用DOM4J解析XML文件案例
用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:
随机推荐
- css 元素溢出
css元素溢出: 当子元素的尺寸超过父元素的尺寸时,需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来设置. overflow的设置项: (1)visible 默认值 内容不 ...
- ZAB协议与Paxos算法
ZooKeeper并没有直接采用Paxos算法,而是采用一种被称为ZAB(ZooKeeper Atomic Broadcast)的一致性协议 ZooKeeper是一个典型的分布式数据一致性的解决方案, ...
- __x__(12)0906第三天__<meta>标签
<meta name=" " content=" " />标签常用功能: 指定浏览器对当前页面的字符集: <!doctype html> ...
- [LeetCode] Binary Search 二分搜索法
Given a sorted (in ascending order) integer array nums of n elements and a target value, write a fun ...
- editplus注册码生成
http://www.jb51.net/tools/editplus/ 主要JS代码: function generate_editplus_regcode() { var list = [0,493 ...
- Lecture5_1&5_2.随机变量的数字特征(数学期望、方差、协方差)
一.数学期望 1.离散型随机变量的数学期望 设X为离散随机变量,其概率分布为:P(X=xk)=pk 若无穷级数$\sum_{k=1}^{+\infty}x_kp_k$绝对收敛 (即满足$\sum_{k ...
- RocketMQ生产消费模型选择
一. 生产者,根据某个标识将消息放到同一个队列中 在发送消息时,使用SelectMessageQueueByHash,该类根据传入进去的arg,进行hash计算,将消息分配到相应的队列中. publi ...
- 小甲鱼零基础python课后题 P22 021函数:lambda表达式
0.请使用lambda表达式将下边函数转变为匿名函数 def fun_A(x,y=3): return x*y 答: lambda x,y=3:x*y 1.请将下边的匿名函数转变为普通的屌丝函数 la ...
- 2018-2019-2-20175303 实验二 《Java开发环境的熟悉》实验报告
2018-2019-2-20175303 实验二 <Java开发环境的熟悉>实验报告 姓名:柴轩达 学号:20175303 班级:1753 实验课程:JAV ...
- Express全系列教程之(三):get传参
一.关于get请求 一般在网站开发中,get都用作数据获取和查询,类似于数据库中的查询操作,当服务器解析前台资源后即传输相应内容:而查询字符串是在URL上进行的,形如: http://localhos ...