使用 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包,如图:
随机推荐
- Cadence OrCAD Cpature创建Title Block
为了统一部门设计文档的管理,需要对文档命名.设计文件符号.设计文件规范做出规定.这里介绍下Cadence OrCAD Cpature原理图设计中创建满足自己的Title Block. 1.创建库文件 ...
- HTML入门9
这一篇着眼于HTML里的音频和视频标签及相关处理: 传统技术不能再web中使用音频和视频,一致使用Flash后来因为一些HTML/CSS特性,安全问题,慢慢退出.在HTML5提出后,新特性<vi ...
- viewport的故事(一)
部分翻译 自原文 https://www.quirksmode.org/mobile/viewports.html 概念:设备像素和CSS像素 设备像素可以通过 screen.width/he ...
- 十三、事务、连接池 、ThreadLocal 、BaseServlet自定义Servlet父类 、 DBUtils à commons-dbutils
l 事务 l 连接池 l ThreadLocal l BaseServlet自定义Servlet父类(只要求会用,不要求会写) l DBUtils à commons-dbutils 事务 l 事务的 ...
- ST表 || RMQ问题 || BZOJ 1699: [Usaco2007 Jan]Balanced Lineup排队 || Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup
题面:P2880 [USACO07JAN]平衡的阵容Balanced Lineup 题解: ST表板子 代码: #include<cstdio> #include<cstring&g ...
- python升级pip和Django安装
1.centos7默认python版本为2.7.5,现升级到3.6.0 2.wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz ...
- 解决spring 用@Value注入配置时候出现中文乱码问题
只要是乱码,很明显需要指定编码格式,为utf-8 <!-- 注解使用properties --> <bean id="configProperties" clas ...
- 在linux服务器下JMeter如何执行jmx性能脚本
准备环境:linux平台.jmeter安装包. jdk 一. 安装jdk jdk的安装可以参考以下内容 http://jingyan.baidu.com/article ...
- Android 跨进程数据共享
Android 开发过程中,基于功能隔离.进程安全.进程保活等等考虑,我们经常需要为应用划分进程,然后不得不面临跨进程通信和跨进程共享数据的挑战. 跨进程通信 相对来说,跨进程通信比较简单,常用的方式 ...
- TCP/IP ARP
ARP(Address Resolution Protocol)地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议. 当在同一网络段内或同一子网内,主机发送信息时将包含目标IP地址的ARP ...