如果要对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. Android常用布局

    FrameLayout(框架布局):从屏幕的左上角开始显示对象,一个覆盖一个,主要用于选项卡视图和图像切换器.# 所有的组件都放在屏幕的左上角,并且以层叠进行显示. LinearLayout(线性布局 ...

  2. Insert select 带选择复制一张表到另一张表

    使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了. 1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,fi ...

  3. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)转载自码农网

    7. 安装 PHP PHP 是用于 web 基础服务的服务器端脚本语言.它也经常被用作通用编程语言.在最小化安装的 CentOS 中安装 PHP: # yum install php 安装完 php ...

  4. WinForm下窗体标题栏上有“帮助”按钮

    将FormBorderStyle设置为Sizable. 最大化和最小化设置为false helpbutton 设置为true

  5. JDK QUEUE队列

    Java  Queue基础 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构. offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被 ...

  6. DFS+模拟 ZOJ 3861 Valid Pattern Lock

    题目传送门 /* 题意:手机划屏解锁,一笔连通所有数字,输出所有可能的路径: DFS:全排列 + ok () 判断函数,去除一些不可能连通的点:) */ #include <cstdio> ...

  7. TODO:Half Half的设计

    IMessageHandler :消息同步处理接口 AbsQueue:消息队列处理层,可以使用Template Method进行设计 INetWorkLayer:专门处理网络IO的,并附带多线程与异步 ...

  8. Mesh系列文章 - 自定义Mesh

    就是在做项目的过程中,有用到三角形的,今天就写一下如何自定义三角形? 先截个图,让大家有个感性认识! //引用 using UnityEngine;        using System.Colle ...

  9. 理解cookie的path和domain属性

    今天在做验证码时发现一个问题:A.B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了.原因是使用了同名的cookie来存储验证码.一时找不到解决方法就参考了W ...

  10. 【BZOJ】2875: [Noi2012]随机数生成器(矩阵乘法+快速乘)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2875 矩阵的话很容易看出来.....我就不写了.太水了. 然后乘法longlong会溢出...那么我 ...