使用Xpath对XML进行模糊查询
如果要对XML文件进行模糊查找的话是一个比较麻烦的事情,Xpath表达式中没有像文件系统中的“*”或"?" 或者有像SQL表达式中的"%",这样的模糊查找的通配符。但是还好,在Xpath的函数中提供了像contains和match这样的函数。
contains是一个字符串查找函数
语法是:fn:contains(string1,string2),表示如果 string1 包含 string2,则返回 true,否则返回 false。
例如:contains('XML','XM'),结果:true。
match是一个匹配正则表达式的函数
语法是:fn:matches(string,pattern),表示如果 string 参数匹配指定的模式,则返回 true,否则返回 false。
例如:matches("12", "[0-9]{1,2}"), 结果:true。
对于Xpath的一些基础知识可以参考:BizTalk开发系列(三十四) Xpath 这样就可以大概知道如何对XML进行模糊查找了。以下我们还是按照之前那个实例来做几个测试。
测试使用的XML
<Root>
<Person ID="1001" >
<Name lang="zh-cn" >张城斌</Name>
<Email xmlns="www.quicklearn.cn" > cbcye@live.com </Email>
<Blog>http://cbcye.cnblogs.com</Blog>
</Person>
<Person ID="1002" >
<Name lang="en" >Gary Zhang</Name>
<Email xmlns="www.quicklearn.cn" > GaryZhang@cbcye.com</Email>
<Blog>http://www.quicklearn.cn</Blog>
</Person>
</Root>
使用工具:XMLSpy, 注意之前提到了一个开源的Xpath表达式编辑工具:SketchPath 在执行查询语句时不能正确的显示查询结果。因此建议使用XMLSpy做以下测试。
1.查询所有Blog节点值中带有 cn 字符串的Person节点
Xpath表达式:/Root//Person[contains(Blog,'cn')]
结果:
2.查询所有Blog节点值中带有 cn 字符串并且属性ID值中有01的Person节点
Xpath表达式:/Root//Person[contains(Blog,'cn') and contains(@ID,'01')]
3.查询受命名空间约束的Email节点的值中带有“live”字符串,并且Blog节点值中还带有cn字符串。
Xpath表达式:/Root/Person//*[local-name()='Email' and contains(text(),'live')]/parent::Person
结果:
4.受命名空间约束的节点与不受命名空间约束的节点及属性的混合查询
Xpath表达式:/Root/Person//*[local-name()='Email' and contains(lower-case(text()),'live')][contains(../Blog,'cn')][contains(../Name/@lang,'zh-cn')]/parent::Person
结果:
5.查询所有节点中值符合Email构造的节点
Xpath表达式://*[matches(text(),'\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*')]
结果:
通过以上测试,通过使用contrains函数和match函数来进行模糊查询基本上可以满足基本的使用需求。另外本篇只是列举了几个基本例子,在具体使用的时候还需根据实际的情况灵活运用函数和轴构造Xpath表达式以满足需求。
使用Xpath对XML进行模糊查询的更多相关文章
- MyBatis中模糊查询
接口 // 模糊查询 List<User> getUserLike(String value); Mapper.xml文件 <!-- 模糊查询 --> <select i ...
- SSM框架mapper.xml模糊查询语句
SSM框架mapper.xml模糊查询语句 在用SSM框架时,如果想要实现模糊查询,可以在mapper.xml文件中进行数据库语句的书写,方法有很多种,在这里我选择了两种介绍: 方法1: <se ...
- 在userMapper.xml文件中模糊查询的常用的3种方法
在userMapper.xml文件中新建映射sql的标签 <!-- ******************** 模糊查询的常用的3种方式:********************* --> ...
- mybatis中xml字段空判断及模糊查询
由于业务特殊的查询需求,需要下面的这种查询,一直感觉模糊不清,本地测试一下顺便做个总结 贴一段xml代码,如下: <if test="receivedName != null and ...
- 关于sql、mysql语句的模糊查询分类与详解,包括基本用法和mapper.xml文件里插入写法
欢迎猿类加qq:2318645572,共同学习进步 实际例子: ssm框架:service业务层->dao层->mappers.xml->junit/test测试 1:service ...
- java使用dom4j和XPath解析XML与.net 操作XML小结
最近研究java的dom4j包,使用 dom4j包来操作了xml 文件 包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), ...
- C# HtmlDocument和HtmlNode的使用以及节点的模糊查询
C#HtmlAgilityPack.HtmlDocument和HtmlAgilityPack.HtmlNode的使用 HtmlAgilityPack.HtmlDocument response = n ...
- Mybatis框架的模糊查询(多种写法)、删除、添加(四)
学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 & ...
- mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE
一.My Batis trim标签有点类似于replace效果. trim 属性, prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条 ...
随机推荐
- hdu 1242:Rescue(BFS广搜 + 优先队列)
Rescue Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- COOKIE和SESSION关系和区别
一.cookie介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 c ...
- 关于html5不支持frameset的解决方法
转自:http://blog.sina.com.cn/s/blog_b2813a790101ejvf.html html5已经不支持frameset了,很郁闷,看了大家的解决方法,无非就是两种1. 使 ...
- [转]Android的Handler总结
一.Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线 ...
- 水题 Codeforces Round #296 (Div. 2) A. Playing with Paper
题目传送门 /* 水题 a或b成倍的减 */ #include <cstdio> #include <iostream> #include <algorithm> ...
- DFS+模拟 ZOJ 3861 Valid Pattern Lock
题目传送门 /* 题意:手机划屏解锁,一笔连通所有数字,输出所有可能的路径: DFS:全排列 + ok () 判断函数,去除一些不可能连通的点:) */ #include <cstdio> ...
- 水题 Codeforces Round #300 A Cutting Banner
题目传送门 /* 水题:一开始看错题意,以为是任意切割,DFS来做:结果只是在中间切出一段来 判断是否余下的是 "CODEFORCES" :) */ #include <cs ...
- Log4Net 配置StmpAppender
目录 Log4Net 配置StmpAppender 1 1.前言 1 2.详细配置 1 1.StmpAppender配置 1 2.Root 配置 2 3.更多选项 ...
- API分析——Jquery UI Dialog
1.阅读API文档的一般方法? 通常地, API由三部分构成:属性.方法.事件. 属性表示参数配置,作为一个组件的微调,或者功能的开启与关闭: 方法表示组件能够发生的动作,或者组件的状态监测: 事件表 ...
- Drainage Ditches
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...