Xpath—解决这个问题的良药
何为良药?
因为在XML中存在一些问题和缺陷,针对这些问题就产生了响应的解决方式。如:
getElementById方法在解析XML时因为一些原因适不适合的:
首先XML中每一个元素节点不一定有id属性。
其次XML中的两个元素节点可能有同样的id属性。这样getElementById这种方法就不再能保证找到我们须要的唯一节点了。
针对这个原因Xpath就诞生了。
Xpath是什么?
Xpath是怎样产生的呢?它存在的必要是什么呢?接下来就让我们一一解答自己心中的疑问:
首先Xpath全称是XML Path Language(XML路径语言)。适用于确定XML文档中某节点位置的语言。XPath是
W3C XSLT 标准的主要元素。而且 XQuery 和 XPointer 都构建于 XPath 表达之上。
因此。对 XPath 的理解是非常多高级 XML应用的基础。
我们能够把它当作类似于SQL一样的查询语言。通过给出的Xpath路径信息(就像SQL命令一样)就能够从XML中查找出符合条件的节点(就像从数据库中返回须要的数据一样)
Xpath怎样用?(XPath 路径表达式具体解释 )
一.路径表达式语法
1.路径 = 相对路径 |绝对路径
2.XPath路径表达式 =步进表达式 | 相对路径 "/"步进表达式。
3.步进表达式=轴 节点測试谓词
说明:
1.当中轴表示步进表达式选择的节点和当前上下文节点间的树状关系(层次关系),节点測试指定步进表达式选择的节点名称扩展名。谓词即相当于过滤表达式以进一步过滤细化节点集。
2.谓词能够是0个或多个。
多个多个谓词用逻辑操作符and。or连接。
取逻辑非用not()函数。请看一个典型的XPath查询表达式:/messages/message//child::node()[@id=0],当中/messages/message是路径(绝对路径以"/"開始),child::是轴表示在子节点下选择,node()是节点測试表示选择全部的节点。[@id=0]是谓词,表示选择全部有属性id而且值为0的节点。
二.相对/绝对路径
如果"/"处在XPath表达式开头则表示文档根元素(表达式中间作为分隔符用以切割每个步进表达式)如:/messages/message/subject是一种绝对路径表示法,它表明是从文档根開始查找节点。如果当前节点是在第一个message节点【/messages/message[1]】。则路径表达式subject(路径前没有"/")这样的表示法称为相对路径,表明从当前节点開始查找。
详细请见以下所述的"表达式上下文"。
三.表达式上下文
上下文事实上表示一种环境。
以明白当前XPath路径表达式处在什么样的环境下运行。比如相同一个路径表达式处在对根节点操作的环境和处在对某一个特定子节点操作的环境下运行所获得的结果可能是全然不一样的。
也就是说XPath路径表达式计算结果取决于它所处的上下文。
XPath上下文基本有下面几种:
1.当前节点(./):
如./sender表示选择当前节点下的sender节点集合(等同于以下所讲的"特定元素",如:sender)
2.父节点(../):
如../sender表示选择当前节点的父节点下的sender节点集合
3.根元素(/):
如/messages表示选择从文档根节点下的messages节点集合.
4.根节点(/*):
这里的*是代表全部节点,可是根元素仅仅有一个。所以这里表示根节点。/*的返回结果和/messages返回的结果一样都是messages节点。
5.递归下降(//):
如当前上下文是messages节点。则//sender将返回下面结果:
/messages//sender:
gkt1980@gmail.com
111@gmail.com
333@gmail.com
/messages/message[1]//sender:
gkt1980@gmail.com
111@gmail.com
我们能够看出XPath表达式返回的结果是:从当前节点開始递归步进搜索当前节点下的全部子节点找到满足条件的节点集。
6.特定元素
如sender:表示选择当前节点下的sender节点集合,等同于(./sender)
注意:在运行XPath时一定要注意上下文。
即当前是在哪个节点下运行XPath表达式。这在XMLDOM中非常重要。
如:在XMLDOM中的selectNodes,selectSingleNode方法的參数都是一个XPath表达式,此时这个XPath表达式的运行上下文就是调用这种方法的节点及它所在的环境。
长处:
在IE6.0及其以上版本号中我们能够使用相同的方式来訪问随意深度的XML数据,这给XML数据的解析操作带来了便利。
缺点:
在Firefox等浏览器中。则是使用了w3c标准的Xpath处理方式。没有IE这么简单的方式。
Xpath—解决这个问题的良药的更多相关文章
- python学习之——selenium元素定位
web自动化测试按步骤拆分,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告. 其中定位元素尤为关键,此篇是使用webdriver通过页面各个 ...
- 【PHP对XML文件的操作技术【完整版】】
无论是c/c++还是java.c#均有对XML文件操作的技术,PHP对XML文件的操作的技术主要有三种: DOM.XPath.SimpleXml. 一.DOM DOM:Document Object ...
- Selenium2+python自动化6-八种元素元素定位(Firebug和firepath)
前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位. 元素定位在这四个环节中是至 ...
- selenium+python自动化之元素定位
自动化按步骤拆分的话,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇接下来讲基本的八种元素定位方法.说的通俗一点,就是教大家找对象. ...
- 深入理解AngularJs-scope(一)
进入正文前的说明:本文中的示例代码并非AngularJs源码,而是来自书籍<<Build Your Own AngularJs>>, 这本书的作者仅依赖jquery和lodas ...
- python+selenium自动化软件测试(第2章):WebDriver API
2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...
- selenium python 一些操作和定位收集
(—)滚动条操作 python中selenium操作下拉滚动条方法汇总 selenium_webdriver(python)控制浏览器滚动条 selenium+Python(select定位) Sel ...
- 自动化测试-3.selenium8种常用元素定位
自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位. 元素定位在这四个环节中是至关重要 ...
- Selenium2+python自动化-八种元素定位(Firebug和Firepath)
前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中 ...
随机推荐
- 在window下搭建即时即用的hyperledger fabric 的环境
有版本号的严格按要求,遇到不少坑 1)安装git 版本无要求 2)安装go 1.9 配置环境变量 3)安装Vagrant 1.9.4 4)安装VirtualBox 5.1.28 5)在go ...
- 【干货分享】C# 实体类生成工具
前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...
- 牛客OI赛制测试赛2 D 星光晚餐
链接:https://www.nowcoder.com/acm/contest/185/D来源:牛客网 题目描述 Johnson和Nancy要在星光下吃晚餐.这是一件很浪漫的事情. 为了增加星光晚餐那 ...
- POJ-1190-生日蛋糕(深搜,剪枝)
生日蛋糕 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23049 Accepted: 8215 Description 7月1 ...
- selenium——操作滚动条
在自动化测试的过程中,难免会应用到翻页键,但是webdriver提供的方法都是操作当前页面可见的元素,对于未在当前范围展示的翻页键,该如何操作呢? 小编在这里介绍一种方法:使用JavaScript操作 ...
- 1.INFORMATION_SCHEMA简介
1. INFORMATION_SCHEMA简介 INFORMATION_SCHEMA提供对数据库元数据的访问,有关MySQL服务器信息,例如数据库或表的名称,列的数据类型或访问权限. INFORMAT ...
- Java后端技术微信交流群!工作、学习、技术、资源等!期待你的加入!
<Java后端技术>专注Java相关技术:SSM.Spring全家桶.微服务.MySQL.MyCat.集群.分布式.中间件.Linux.网络.多线程,偶尔讲点运维Jenkins.Nexus ...
- 剑指Offer(书):矩阵中的路径
题目: * 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.* 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.* 如果一条路径经 ...
- 【HIHOCODER 1478】 水陆距离(BFS)
描述 给定一个N x M的01矩阵,其中1表示陆地,0表示水域.对于每一个位置,求出它距离最近的水域的距离是多少. 矩阵中每个位置与它上下左右相邻的格子距离为1. 输入 第一行包含两个整数,N和M. ...
- HDU 1257 最少拦截系统(最长上升子序列)
题意: 给定n个数, 然后要求看看有多少对不上升子序列. 分析: 求出最长上升子序列, 那么整个序列中LIS外的数都会在前面找到一个比自己大的数, 所以不上升子序列最多有最长上升子序列个数个. 关于求 ...