如果要对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进行模糊查询的更多相关文章

  1. MyBatis中模糊查询

    接口 // 模糊查询 List<User> getUserLike(String value); Mapper.xml文件 <!-- 模糊查询 --> <select i ...

  2. SSM框架mapper.xml模糊查询语句

    SSM框架mapper.xml模糊查询语句 在用SSM框架时,如果想要实现模糊查询,可以在mapper.xml文件中进行数据库语句的书写,方法有很多种,在这里我选择了两种介绍: 方法1: <se ...

  3. 在userMapper.xml文件中模糊查询的常用的3种方法

    在userMapper.xml文件中新建映射sql的标签 <!-- ******************** 模糊查询的常用的3种方式:********************* --> ...

  4. mybatis中xml字段空判断及模糊查询

    由于业务特殊的查询需求,需要下面的这种查询,一直感觉模糊不清,本地测试一下顺便做个总结 贴一段xml代码,如下: <if test="receivedName != null and ...

  5. 关于sql、mysql语句的模糊查询分类与详解,包括基本用法和mapper.xml文件里插入写法

    欢迎猿类加qq:2318645572,共同学习进步 实际例子: ssm框架:service业务层->dao层->mappers.xml->junit/test测试 1:service ...

  6. java使用dom4j和XPath解析XML与.net 操作XML小结

    最近研究java的dom4j包,使用 dom4j包来操作了xml 文件 包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), ...

  7. C# HtmlDocument和HtmlNode的使用以及节点的模糊查询

    C#HtmlAgilityPack.HtmlDocument和HtmlAgilityPack.HtmlNode的使用 HtmlAgilityPack.HtmlDocument response = n ...

  8. Mybatis框架的模糊查询(多种写法)、删除、添加(四)

    学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 & ...

  9. mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE

    一.My Batis trim标签有点类似于replace效果. trim 属性, prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条 ...

随机推荐

  1. sybase ASE 12.5版本下载地址

    为便于广大爱好者方便 学习Sybase ASE数据库,我将windows平台下的(32位)Sybase ASE放到下面的位置: ASE 12.5: (8个包) http://download.csdn ...

  2. loj 1150(spfa预处理+二分+最大匹配)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26864 思路:首先是spfa预处理出每个'G'到'H'的最短距离, ...

  3. VMware安装、配置CentOS

    出处:http://www.cnblogs.com/jlily/ 1. 准备CentOS安装镜像文件 官网下载地址:http://www.centos.org/download/ 官方有三个版本:DV ...

  4. 【JNI】C向C++改造

    步骤: 1. 把c文件后缀名换成cpp2. Android.mk文件中的hello.c也要换成hello.cpp3. c++的使用的环境变量结构体中,访问了c使用的结构体的函数指针,函数名全部都是一样 ...

  5. 版本引发的血案check the manual that corresponds to your MySQL server version for the right syntax

    该错误mysql5.1有问题,mysql5.3版本没问题

  6. php 字符串式非关联数组循环

    $xiangmu='1,2,3'; $xiangmu=explode(',',$jc['xiangmu']); $xm=''; for($i=0;$i<count($f)-1;$i++){ $x ...

  7. SU Demos-02Filtering-05Suk1k2filter

    本人数学不咋地,本demo也是一知半解,敬请谅解. 这是生成的脉冲数据

  8. Python实践:开篇

    一.概述 Python实践 是应用Python解决实际问题的案例集合,这些案例中的Python应用通常 功能各异.大小不一. 该系列文章是本人应用Python的实践总结,会不定期更新. 二.目录 Py ...

  9. 如何找到所有HTML Select 标签的选中项?

    $(‘[name=NameofSelectedTag]:selected’);

  10. Codeforces Round #295 (Div. 2)

    水 A. Pangram /* 水题 */ #include <cstdio> #include <iostream> #include <algorithm> # ...