基于流索引的XPath查询谓词处理模型
- 格式:pdf
- 大小:263.77 KB
- 文档页数:4
XPath定位语法总结XPath介绍XPath(XML Path Language)是⼀门解析XML⽂档的语⾔,可在XML⽂档中对元素和属性进⾏遍历。
因为XML和HTML语法类似,所以,XPath⼴泛⽤于解析HTML⽂档数据,HTML页⾯由标签构成,这些标签就像家族⾥的族谱⼀样,有明确的层级关系,正是基于这种层级关系,XPath语法才能选中所需的数据,在HTML⽂档中XPath通过元素(即HTML标签)和属性(即HTML标签的属性)进⾏定位。
XPath常⽤于Selenium⾃动化测试中的元素定位和数据爬⾍定位,使⽤路径表达式来选取XML和HTML⽂档中的节点或节点集XPath语法XPath语法⼤致可以分为四⼤类:层级、属性、函数和其它1. 层级/后⾯直接跟⼦节点,在linux系统中很常见,如/html/body/div/div[2]/div[5]/div[1]/div/form/span[1]/input//全局查找,可以是任意位置,如//div//input,双斜杠可视为相对路径,单斜杠可视为绝对路径parent选取当前节点的⽗节点child选取当前节点的所有⼦节点preceding选取当前节点的开始标签之前的所有节点following选取当前节点的结束标签之后的所有节点ancestor选取当前节点的所有先辈节点 (⽗、祖⽗等)descendant选取当前节点的所有后代节点 (⼦、孙等)descendant-or-self选取当前节点的所有后代节点及当前节点本⾝.和在linux系统中⼀个意思,表⽰当前⽬录,即当前节点..同样和在linux系统中⼀个意思,表⽰上⼀级⽬录,即当前节点的⽗节点2. 属性@ 属性访问,选择带有某个属性的节点,如//input[@name],选取带有name属性的input标签;//input[@*],选取所有带属性的input标签,可以直接通过元素的id、name和class属性定位,如//input[@id="kw"],选取id="kw"属性的input标签;//input[@class="s_ipt"],选取class="s_ipt"属性的input标签,若id/name/class都没有,可以通过其它属性进⾏定位,但要确保此属性是不变的,不能是下次请求时属性就消失或者有变化了,如:class="xh-highlight",⾼亮属性在选中时才会出现3. 函数text()⽂本定位,常和contains()函数⼀起使⽤,//div/a[contains(text(),"学")]last()返回被处理节点的最后⼀个元素,//div[@id="s-top-left"]/a[last()]position()匹配返回节点的索引位置,//div[@id="s-top-left"]/a[position()=1]contains()匹配⼀个属性值中包含的字符串,⽤于模糊定位,//div[contains(@id,"s-t")]/a[last()]starts-with()匹配⼀个属性值开始位置的关键字,⽤于模糊定位,//div[starts-with(@id,"s-t")]/a[last()]4. 其它=、!=、<、>、<=、>=、or、and运算符,⼀⽬了然,不再做解释*通配符,匹配任意字符,如//div/*,选取div标签下的所有标签|与或符,双⽅条件都满⾜时都显⽰,否则只显⽰满⾜条件的⼀⽅,如://input|//title[]谓语和索引需要⽤[]括起来,谓语是⽤来查找某个特定节点或包含指定值的节点,如://input[position()<2],选择最前⾯的input标签;//div[@id="s-top-left"]/a[1],选择id="s-top-left"的div标签下的第⼀个a标签⽰例下⾯以百度⾸页为例,在百度页⾯按F12打开开发⼯具,在开发⼯具页⾯按住Ctrl + F,在搜索框内输⼊XPath语法即可定位元素,如下三种浏览器页⾯所⽰,注意输⼊框右侧的分数值,1/1、1of1才表⽰定位到唯⼀的元素,1of2表⽰定位到2个,⽬前选中的是第⼀个,⼀般情况下,使⽤Selenium做⾃动化时定位元素基本上都是要唯⼀,在进⾏数据爬⾍时1of10之类的多元素定位使⽤较多以下XPath语法都可在百度页⾯定位到唯⼀值,此处不再符百度HTML⽂档以下XPath语法都可定位到“百度⼀下”按钮//*[@id='su'] # 在HTML⽂档中查找所有id='su'的标签//input[@id='su'] # 在HTML⽂档中查找id='su'的input标签//input[@type='submit'] # 在HTML⽂档中查找type='submit'的input标签//input[@value='百度⼀下'] # 在HTML⽂档中查找value='百度⼀下'的input标签……以下XPath语法都可定位到百度输⼊框//*[@id='kw'] # 在HTML⽂档中查找所有id='kw'的标签//input[@type='text'] # 在HTML⽂档中查找type='text'的input标签//input[@class='s_ipt'] # 在HTML⽂档中查找class='s_ipt'的input标签//input[@name='wd'] # 在HTML⽂档中查找name='wd'的input标签//input[@id='kw'] # 在HTML⽂档中查找id='kw'的input标签//input[starts-with(@class,'s')] # 在HTML⽂档中查找class属性值包含“s”的input标签……以下XPath语法都可定位到百度⾸页左上⾓“学术”链接按钮//*[@id='s-top-left']/a[7] # 在HTML⽂档中查找所有id='s-top-left'的标签下的第7个a标签//div[@id='s-top-left']/a[7] # 在HTML⽂档中查找id='s-top-left'的div标签下的第7个a标签//div[@id='s-top-left']/a[position()=7] # 在HTML⽂档中查找id='s-top-left'的div标签下的索引值等于7的a标签//div[@id='s-top-left']/a[position()>6] # 在HTML⽂档中查找id='s-top-left'的div标签下的索引值⼤于6的a标签//div[@id='s-top-left']/a[last()] # 在HTML⽂档中查找id='s-top-left'的div标签下的最后⼀个a标签//div[@id='s-top-left']/a[1]/@href # 获取页⾯中“新闻”的链接地址//a[contains(text(),'学')] # 在HTML⽂档中查找⽂本信息包含“学”的a标签……以下XPath语法都可定位到百度⾸页左上⾓“新闻”链接按钮//*[@id='s-top-left']/a[1] # 在HTML⽂档中查找所有id='s-top-left'的标签下的第1个a标签//div[@id='s-top-left']/child::a[1] # 在HTML⽂档中查找id='s-top-left'的div标签下⼦标签的第1个a标签//div[@id='s-top-left']/descendant::a[1] # 在HTML⽂档中查找id='s-top-left'的div标签后代中的第1个a标签//div[@id='s_top_wrap']/following::a[1] # 在HTML⽂档中查找id='s_top_wrap'的div标签后的第1个a标签//div[@class='mnav s-top-more-btn']/preceding::a[7] # 查找class='mnav s-top-more-btn'的div标签之前的第7个a标签//a[contains(text(),'h')]/parent::*/a[position()=1] # 查找包含h的⽂本的a标签的⽗标签下索引值为1的a标签//a[contains(text(),'h')]/ancestor::*/a[position()<2] # 查找包含h的⽂本的a标签的先辈标签下索引值⼩于2的a标签……对于如下图所⽰的情况,所需信息并没有在标签对中可以使⽤下⾯的语法进⾏定位//span[@class='pl'][3]/following::text()[1] # 获取class='pl'的第三个span标签后的第1个⽂本内容//span[./text()='语⾔:']/following::text()[1] # 获取当前节点包含⽂本“语⾔:”的span标签后的第1个⽂本内容还可以下载个Xpath Helper插件,如下图,//p[@class='lh'][position()<5]/a得到4个结果并在页⾯⾼亮显⽰以上只是学习XPath语法,了解XPath定位的⼀种⽅式最为简单的⽅法还是选择元素后右键选择复制XPath,只是对于复杂页⾯复制出的语法可读性不太好之后就可以在代码中使⽤啦,代码中注意引号的使⽤,内外不能同时使⽤单引或双引号find_element_by_xpath("//input[@id='kw']").clear()find_element_by_xpath('//*[@id="kw"]').send_keys("XPath")find_element_by_xpath('//*[@id="su"]').click()find_element(By.XPATH, '//a[@class="toindex"]').click()。
【xpath获取标签下所有文本的方法】一、什么是xpath?在学习xpath获取标签下所有文本的方法之前,首先要了解xpath是什么。
简单来说,xpath是一种用来在XML文档中进行导航和查询的语言。
它可以帮助我们定位XML文档中的节点,并获取节点的内容或属性。
在网页开发中,xpath也常常用来定位和提取HTML标签。
二、基本的xpath语法在使用xpath获取标签下所有文本的方法前,我们先来看一下xpath的基本语法。
xpath的语法包括节点选择、谓词、运算符等。
其中,节点选择是最基本的部分,可以用来定位节点并提取内容。
我们可以使用路径表达式来选取节点,使用“/”来表示根节点,使用“//”来表示从任意节点开始匹配,使用“.”来表示当前节点等等。
三、获取标签下所有文本的方法在网页开发中,我们经常会遇到需要获取某个标签下所有文本的情况。
这时,就可以借助xpath来实现。
如果我们想要获取某个div标签下所有文本,可以使用以下的xpath表达式://div//text()这个表达式的含义是:选取所有div节点下的所有文本。
通过这样的xpath表达式,我们就可以获取到该div标签下所有的文本内容。
四、个人观点和理解使用xpath获取标签下所有文本的方法在网页开发中是非常常见和实用的。
它可以帮助我们快速准确地定位到需要的内容,并进行提取和处理。
在实际应用中,我们还可以结合其他xpath语法和方法,来进一步实现对网页内容的抓取和分析。
xpath是一个非常强大的工具,能够大大提高我们的开发效率和准确性。
五、总结回顾通过本文的介绍,我们了解了什么是xpath,掌握了基本的xpath语法,以及如何使用xpath获取标签下所有文本的方法。
在实际的网页开发中,xpath是一个非常实用的工具,能够帮助我们快速准确地定位和提取所需的内容。
xpath的应用范围非常广泛,不光可以用在网页开发中,还可以用在各种XML文档的处理中。
xpath教程⼆----通过ID和Class检索必备知识点在html中,id是唯⼀的在html中,class是可以多处引⽤的⼯具Python3版本lxml库【优点是解析快】HTML代码块【从⽹络中获取或者⾃⼰杜撰⼀个】requests【推荐安装,从⽹页上获取⽹页代码练⼿,再好不过了】Xpath学习先定义html代码块【这次只从body开始】<body><div class="container"><div id="first"><div class="one">都市</div><div class="two">德玛西亚</div><div class="two">王牌对王牌</div><a><div class="spe">特殊位置</div></a></div><div id="second"><div class="three">⽔电费</div><div class="three">说的话房间不开封</div><div class="four">三顿饭⿊客技术</div></div><div id="third"><div class="three">⽔电费</div><div class="three">说的话房间开封</div></div></div></body>"""再准备python代码块from lxml import etreehtml = etree.HTML(html_str)任务⼀:获取类名为one的⽂本值解决这个问题,有⾮常简单的xpath路径,直接匹配html代码中的class,然后获取⽂本值就⾏代码如下:print(html.xpath('.//div[@class="one"]/text()'))结果:['都市']这⾥需要解释多个地⽅: - @的作⽤:表⽰属性,div属于标签,它有⾃⼰的属性,例如class、id等等。
XPath语法规则一、XPath术语:1.节点:在XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。
XML 文档是被作为节点树来对待的。
树的根被称为文档节点或者根节点。
实例1:XML文档:<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book><title lang="en">Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price></book></bookstore>上面的XML文档中的节点例子:<bookstore>(文档节点),<author>J K. Rowling</author>(元素节点),lang="en"(属性节点)。
2.基本值(或称原子值,Atomic value)基本值是无父或无子的节点。
基本值的例子:在实例1的xml文档中J K. Rowling、"en"3.项目(Item)项目是基本值或者节点。
4.节点的关系:1)父节点(Parent):每个元素以及属性都有一个父。
在上面实例1的xml 文档中,book 元素是title、author、year 以及price 元素的父节点。
2)子节点(Children):元素节点可有零个、一个或多个子。
在上面实例1的xml 文档中,title、author、year 以及price 元素都是book 元素的子。
3)同胞(Sibling):拥有相同的父的节点,在上面实例1的xml 文档中,title、author、year 以及price 元素都是同胞。
第40卷第1期河南大学学报(自然科学版)V ol.40N o.1 2010年1月Journal of H enan U niver sity(N atur al Science)Jan.2010一种基于XM L前缀编码的路径查询杨扬,尹柯(河南大学计算中心,河南开封475001)摘要:为了解决XM L文档树子结点过多时前缀编码长度增加的问题,提出一种改进的X M L前缀编码)))I PE 编码.基于I PE编码,结合倒排索引表,给出X Path路径查询算法,可以有效地提高XM L文档的查询速度.关键词:扩展标记语言;IPE编码;路径查询中图分类号:T P311文献标志码:A文章编号:1003-4978(2010)01-0085-05A Path Query Based on XML Prefix EncodingYANG Yang,YIN Ke(Comp uting Center of H enan Univer sity,H enan K aif eng475001,China)Abstract:In this paper,IPE enco ding,an improv ed XM L prefix enco ding,is pro po sed.W ith this encoding,the length of Prefix Code reduces when XM L do cument tree has mor e nodes.Based on IP E enco ding by inver ted index tables,a path quer y ar ithmetic is presented,ther eby query ing speed is im pr oved effect ively.Key words:Ex tensible M arkup L anguag e;IP E Encoding;Path Q uer y0引言可扩展标记语言XM L(eXtensible Markup Language)是SGML的一个子集,用于创建可相互转换的结构化文本文档和数据文档,可将SGM L的丰富功能与H TM L的易用性结合到Web中,以一种开放的自我描述方式定义数据结构.XM L具有半结构性、开放性、异构性、可扩展性、灵活性等特点,已成为数据交换和数据存储的标准,越来越多的数据采用XML格式存储.目前,如何快速从XM L文档中查询数据,已成为当前研究的一个热点[1-2].本文提出一种改进的前缀编码)))IPE编码(Im pro ved Prefix Encoding,简称IPE),该编码能够唯一确定XM L文档树中的结点,缩减编码长度,快速判断结点间结构关系.基于IPE编码,给出了XPath路径查询算法,有效提高XM L数据查询速度.1IPE编码的定义为了有效支持半结构化XM L数据查询,目前存在多种编码方案.其中,前缀编码[3]保存了元素的路径信息,将结点的双亲编码直接作为该结点编码的前缀,各层结点之间用圆点/。
XQuery 在XML 流上查询的结构化连接吴晓勇,张 昱,孙东海(中国科学技术大学计算机科学技术系,合肥 230027)摘 要:通过分析XQuery 查询与XPath 查询的区别与联系,定义了扩展的基本XSIEQ 机E-XSIEQ ,它是一种被索引化、基于栈的自动机。
提出用变量表来收集XPath 查询结果,并将这些中间结果组织成原子表集合,结果构造时能够根据原子表元组之间的上下文关系,对原子表集合快速地进行连接。
描述了XQuery 查询过程中的结构化连接算法,给出了结果构造的时间性能分析。
关键词:自动机;分层缓冲区;结构化连接Structural Join in XQuery Processing on XML StreamWU Xiao-yong, ZHANG Yu, SUN Dong-hai(Department of Computer Science & Technology, University of Science & Technology of China, Hefei 230027)【Abstract 】An extended XML Stream Query with Immediate Evaluation(XSIEQ) machine for XQuery is defined, which is a kind of indexed automata based on stack. Variable table is used to reserve the XPath query results, and these results form into a set of atom tables. The algorithm on structural join is introduced and the result-constructing performance is analyzed. 【Key words 】automata; layered buffer; structural join计 算 机 工 程Computer Engineering 第34卷 第4期Vol.34 No.4 2008年2月February 2008·软件技术与数据库·文章编号:1000—3428(2008)04—0063—03文献标识码:A中图分类号:TP311.13一些基于XPath 的XML 流查询引擎能支持简单的XQuery 查询,但是由于XQuery 的嵌套和多关键字排序等特性增加了XQuery 查询处理的复杂度。
经常在工作中会使用到XPath的相关知识,但每次总会在一些关键的地方不记得或不太清楚,所以免不了每次总要查一些零碎的知识,感觉即很烦又浪费时间,所以对XPath归纳及总结一下。
在这篇文章中你将能学习到:•XPath简介•XPath 路径表达式详解•XPath在DOM,XSLT及XQuery中的应用XPath简介XPath是W3C的一个标准。
它最主要的目的是为了在XML1.0或X ML1.1文档节点树中定位节点所设计。
目前有XPath1.0和XPath2. 0两个版本。
其中Xpath1.0是1999年成为W3C标准,而XPath 2.0标准的确立是在2007年。
W3C关于XPath的英文详细文档请见:/TR/xpath20/。
XPath是一种表达式语言,它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等。
XPath2.0是XPath1.0的超集。
它是对XPath1.0的扩展,它可以支持更加丰富的数据类型,并且X Path2.0保持了对XPath1.0的相对很好的向后兼容性,几乎所有的XPath2.0的返回结果都可以和XPath1.0保持一样。
另外XPath2. 0也是XSLT2.0和XQuery1.0的用于查询定位节点的主表达式语言。
XQuery1.0是对XPath2.0的扩展。
关于在XSLT和XQuery中使用XPath表达式定位节点的知识在后面的实例中会有所介绍。
在学习XPath之前你应该对XML的节点,元素,属性,原子值(文本),处理指令,注释,根节点(文档节点),命名空间以及对节点间的关系如:父(Parent),子(Children),兄弟(Sibling),先辈(Ancestor),后代(Descendant)等概念有所了解。
这里不在说明。
XPath路径表达式在本小节下面的内容中你将可以学习到:•路径表达式语法•相对/绝对路径•表达式上下文•谓词(筛选表达式)及轴的概念•运算符及特殊字符•常用表达式实例•函数及说明这里给出一个实例Xml文件。
解析xpath语法解析
XPath是一种用于在XML或HTML文档中定位节点的语法。
它可以通过路径指定节点的位置,以及通过谓语筛选特定节点。
以下是XPath语法的解析:
1. 选择节点的路径:
- 单斜杠(/)用于从根节点开始选择节点。
- 双斜杠(//)用于在整个文档中选择节点。
- 节点名称用于选择具有特定名称的节点。
2. 谓语:
- 谓语用于通过条件筛选特定的节点。
它们用方括号([])表示,并紧跟在节点名称后面。
- 谓语可以基于节点的属性、位置或其他条件进行筛选。
- 谓语中可以使用运算符(如等于、不等于、大于、小于等)和常量值。
3. 选择节点的通配符:
- 星号(*)用于选择任意类型的节点。
- 一个节点名称后面加上星号(例如bookstore/*)可选择该节点的所有子节点。
4. 使用轴选择节点:
- 轴指定要沿着特定方向搜索的节点类型。
- 常用的轴有:
- 子(child)轴:选择当前节点的所有子节点。
- 祖先(ancestor)轴:选择当前节点的所有祖先节点。
- 同级(sibling)轴:选择当前节点的所有同级节点。
- 前一个(preceding)轴:选择当前节点之前的所有节点。
- 后一个(following)轴:选择当前节点之后的所有节点。
5. 选择节点的属性:
- 通过在节点名称后面使用@符号,可以选择节点的属性。
- 属性可以用于筛选具有指定属性名或属性值的节点。
XPath语法使用简洁的路径和谓语方式,可以方便地定位文档中的节点,并进行筛选和操作。