打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用Xpath对XML进行模糊查询

来源:http://www.cnblogs.com/cbcye/archive/2009/03/14/1411291.html 

 如果要对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表达式以满足需求。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
XML模糊查询应用:使用Xpath - 学IT网 xueit.com
连续动作:关键词自动搜集采集信息—以京东为例
解析html和采集网页的神兵利器
C#中对 XML节点进行增、删、改、查
绝了,100层的xml,一行代码完成解析!这个开发包真的牛!
lxml 学习笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服