XPath语法使用的一些心得
XPath语法还是很强大的,支持一些函数和操作符,方便操作,但是因为版本的原因可能有的函数只能在XPath2(2007)里使用,而不能在XPath1(1999)中使用,比如函数
ends-with(string).
XPath 语法在对dom对象的选择搜索上是很有用的,网上也有很多关于XPath的语法使用介绍,但是都大致相同,其实主要的搜索可以分为三个方面,(1)对节点的搜索,(2)对节点元素的搜索,(3)对节点属性的搜索为了说明方便,先展示一个dom的树形图针对此图,我们用XPath语法来说说搜索遍历的写法,如有错误,请各位wi友批评指正。
<?xml version="1.0"?>
<navi>
<navi prikey="SQ">
<name
text="A级" value="yhl_aj"/>
<name
text="B级" value="yhl_bj"/>
</navi>
<navi prikey="SB">
<name
text="B级" value="bzl_bj"/>
</navi>
</navi>
1) 对节点的搜索对于节点的搜索只需遵循一个原则,将搜索路径定位到你要找的那个节点路径,写法形如:"..father/father
's father/father/I want"。比如我要找name节点,我就类似的这么写XPath:"/navi/navi/name",你要找name节点,所以就定位到/name就行了,但是你看图的话就会你找到了三个符合条件的节点,也许你只想找<name
text="B级" value="bzl_bj"/>这个节点,那就加一些条件比如你可以这么写XPath:"/navi/navi[@prikey=\'SB\']
/name",这种写法是通过限制父路径的条件,还有一种写法:"/navi/navi/name[@value=\'bzl_bj\']",这种写法是通过name本身的特性来限制。但是无论怎么写,想找那个节点,先在xml的路径上定位它,然后用刚刚说过的两种方法进行唯一性的刷选。不管那个层次的节点都是类似的。
2)对节点元素的搜索对节点元素的搜索也只需遵循一个原则,先定位到这个元素所在的节点,然后加上//元素名.写法形如:"..
father/this node//I want".此处如果把name都看成navi的元素,那么对这些name元素的搜索可以如此定位"/navi/navi//name",前部分对于节点的定位无需赘述,如果在想进一步定位你想要的哪个name,只需类似这么写"/navi/navi//name[@value=\'bzl_bj\']
", So Easy!!!如果要从这个dom中寻找,那么前半部分的节点路径就不需要了,直接这么写:"//name[@value='****']"
3) 对属性的搜索对元素的属性搜索也是很简单的,写法形如:"..father/this
Element//@I want"。比如你想搜<name text="B级"
value="bzl_bj"/>的text属性,只需写"/navi/navi[@prikey=\'SB\']/name//@text"。如果你想从这个dom对象里搜索,就这么写"//@text",那么得到的就是一个text集合数组了。这些都是作为参数放到selectNodes
(**)或者selectSingleNode(**),就能得到你想要的了。
总之一句话:"一杠节点两杠元素,加个@属性随我赋"。
XPath语法使用的一些心得的更多相关文章
- Python爬虫利器三之Xpath语法与lxml库的用法
前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 Beau ...
- XPath语法 在C#中使用XPath示例 【转http://www.cnblogs.com/yukaizhao/archive/2011/07/25/xpath.html】非常详细的文章
XPath语法 在C#中使用XPath示例 XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识. 示例Xml: <?xml ve ...
- XPath语法 在C#中使用XPath示例
XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识. 示例Xml: <?xml version="1.0" en ...
- Dom4j使用Xpath语法读取xml节点
我们可以使用Xpath的语法来轻易的读取xml的某个节点[类似于jQuery的选择器]: 使用Xpath语法需要添加新的jaxen-1.1-beta-7.rar 这个jar包 dom4j完整jar包我 ...
- XDocument读取xml的所有元素以及XPath语法
原文 http://www.cnblogs.com/xxyishutong/p/3326375.html <?xml version="1.0" encoding=&quo ...
- C#操作Xml:XPath语法 在C#中使用XPath示例
XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识. 示例Xml: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- Xpath语法学习
贴几个我学习Xpath的参考 1 基本使用的参考 XPath学习:基本语法(一) 2 较为详细且清晰例子参考,推荐 XPath 详解,总结 3 详细语法参考 Xpath语法格式整理 4 官方参考 XP ...
- 芝麻HTTP:Python爬虫利器之Xpath语法与lxml库的用法
安装 pip install lxml 利用 pip 安装即可 XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPat ...
- 使用Xpath定位元素(和元素定位相关的Xpath语法)
本文主要讲述Xpath语法中,和元素定位相关的语法 第一种方法:通过绝对路径做定位(相信大家不会使用这种方式) By.xpath("html/body/div/form/input" ...
随机推荐
- 编码总结,以及对BOM的理解
一.前言 在跨平台.跨操作系统或者跨区域之间,经常会涉及到编码的问题,因为前段时间在项目中,遇到了因为编码而产生乱码的问题,以前对编码也是一知半解,所以决定对编码有一个更为深入的了解,因此才有了这篇自 ...
- 【SPOJ -NSUBSTR】Substrings 【后缀自动机+dp】
题意 给出一个字符串,要你找出所有长度的子串分别的最多出现次数. 分析 我们建出后缀自动机,然后预处理出每个状态的cnt,cnt[u]指的是u这个状态的right集合大小.我们设f[len]为长度为l ...
- 高性能Web服务器Nginx的配置与部署研究(11)应用模块之Memcached模块的两大应用场景
一.应用场景1 最近在一个项目中,用到了Nginx的Memcached模块,所以就在这个系列教程中提前把Memcached模块拿出来写了.另外发现最近我的 博客文章频频被很多用采集器的网站拿走,帮我发 ...
- Struts2分模块开发
-------------------siwuxie095 Struts2 分模块开发 在实际开发中,如果一个项目是团队开发的,也就是很多人开发的, 每个人都需要去修改 struts.xml,因为 s ...
- zookeeper 面试题2 比较乱
Zookeeper是什么框架分布式的.开源的分布式应用程序协调服务,原本是Hadoop.HBase的一个重要组件.它为分布式应用提供一致性服务的软件,包括:配置维护.域名服务.分布式同步.组服务等.应 ...
- Tsung测试之配置文件
Jabber配置: <?xml version="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/local/tsung/sha ...
- Video组件:控制视频的播放与暂停
来自<sencha touch权威指南>第10章,315页开始 app.js代码如下: Ext.require(['Ext.Video','Ext.MessageBox','Ext.Too ...
- pymsql的简单实用方法
在进行本文以下内容之前需要注意: 1.你有一个MySQL数据库,并且已经启动. 2.你有可以连接该数据库的用户名和密码 3.你有一个有权限操作的database 连接数据库 #导入pymsql imp ...
- tree.J48
Weka为一个Java基础上的机器学习工具.上手简单,并提供图形化界面.提供如分类.聚类.频繁项挖掘等工具.本篇文章主要写一下分类器算法中的J48算法及事实上现. 一.算法 J48是基于C4.5实现的 ...
- CodeForces 288A Polo the Penguin and Strings (水题)
题意:给定一个字符,让你用前 k 个字符把它排成 n 长度,相邻的字符不能相等,并且把字典序最小. 析:其实很简单么,我们只要多循环ab,就行,最后再把剩下的放上,要注意k为1的时候. 代码如下: # ...