xpath选择器简介及如何使⽤
xpath选择器简介及如何使⽤
⼀、总结
⼀句话总结:XPath 的全称是 XML Path Language,即 XML 路径语⾔,它是⼀种在结构化⽂档(⽐如 XML 和 HTML ⽂档)中定位信息的语⾔,XPath 使⽤路径表达式来选取 XML ⽂档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。
XPath 使⽤路径表达式来选取 XML ⽂档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。
息的语⾔,
1、xpath如何使⽤?
19 xml=loadXMLDoc("/example/l");
20 path="/bookstore/book/title"
32 // code for Mozilla, Firefox, Opera, etc.
33 else if (document.implementation && ateDocument)
34 {
35 var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
36 var result=nodes.iterateNext();
37
38 while (result)
2、插件如何使⽤?
其实所有的插件的使⽤⽆⾮就是以下步骤:
1、引⼊插件
2、调⽤函数
⼆、xpath选择器
XPath 的全称是 XML Path Language,即 XML 路径语⾔,它是⼀种在结构化⽂档(⽐如 XML 和 HTML ⽂档)中定位信息的语⾔,XPath 使⽤路径表达式来选取 XML ⽂档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。
XPath 是⼀门在 XML ⽂档中查信息的语⾔。XPath 可⽤来在 XML ⽂档中对元素和属性进⾏遍历。
XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
因此,对 XPath 的理解是很多⾼级 XML 应⽤的基础。
1. 语法
1.1 HTML 实例⽂档
后⾯我们将以下⾯的 HTML ⽂档介绍 XPath 的使⽤ 。
<html>
<head>
<base href='example/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image 1 <br/><img src='image1_thumb.jpg'/></a>
<a href='image2.html'>Name: My image 2 <br/><img src='image2_thumb.jpg'/></a>
<a href='image3.html'>Name: My image 3 <br/><img src='image3_thumb.jpg'/></a>
<a href='image4.html'>Name: My image 4 <br/><img src='image4_thumb.jpg'/></a>
<a>Name: My image 5 <br/><img src='image5_thumb.jpg'/></a>
</div>
</body></html>
1.2 选取节点
下表是 XPath 常⽤的语法,实例对应的是上⾯的 HTML ⽂档。
表达式描述实例结果
nodename选取此节点的所有⼦节点body选取 body 元素的所有⼦节点
/从根节点选取/html选取根元素 html
//匹配选择的当前节点,不考虑位置//img选取所有 img 元素,⽽不管它们在⽂档的位置
.选取当前节点./img选取当前节点下的 img 节点
..选取当前节点的⽗节点../img选取当前节点的⽗节点下的 title
@选取属性//a[@href=”image1.html”]选取所有 href 属性为 “image1.html” 的 a 节点
//a/@href获取所有 a 节点的 href 属性的值
1.3 谓语
谓语⽤来查某个特定的节点或者包含某个指定的值的节点,谓语嵌在⽅括号中。
路径表达式结果
//body//a[1]选取属于 body ⼦元素的第⼀个 a 元素
//body//a[last()]选取属于 body ⼦元素的最好⼀个 a 元素
//a[@href]选取所有拥有名为 href 的属性的 a 元素
//a[@href=’image2.html’]选取所有 href 属性等于 “image2.html” 的 a 元素
2. 在 Python 中使⽤
在 python 中使⽤ XPath 需要安装相应的库,这⾥推荐使⽤ lxml 库。
代码⽰例:
# -*- coding: utf-8 -*-
from lxml import etree
html = """<html>
<head>
<base href='example/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image 1 <br/><img src='image1_thumb.jpg'/></a>
<a href='image2.html'>Name: My image 2 <br/><img src='image2_thumb.jpg'/></a>
<a href='image3.html'>Name: My image 3 <br/><img src='image3_thumb.jpg'/></a>
<a href='image4.html'>Name: My image 4 <br/><img src='image4_thumb.jpg'/></a>
<a>Name: My image 5 <br/><img src='image5_thumb.jpg'/></a>
</div>
</body>
</html>"""
from lxml import etree
soup = etree.HTML(html)
page=soup.xpath('/html/head/base/@href') #从根节点开始选取
page=soup.xpath('/html/head//@href') #也可以这样选择结果是相同的
#//表⽰从当前节点开始选择,不必考虑位置。
#选取title下所有⽂本
page=soup.xpath("//title/text()")
#选取HTML下所有a节点
page=soup.xpath('//a')
#选取标签下属性为image.html的scr属性
page=soup.xpath("//a[@href='image1.html']/img/@src")
#选取a标签下第三个href属性
page=soup.xpath("//a[contains(@href, '3')]/@href")
#body最后⼀个a标签href属性
page=soup.xpath("//body//a[last()]/img/@src")
page=soup.xpath('//a[@class="active"][@id="value"]/img/@src') #多个属性定位
3.常⽤函数
除了索引、属性外,Xpath还可以使⽤便捷的函数来增强定位的准确性。下⾯试常⽤的⼏个函数:
<a class="menu_hot" href="/ads/auth/promote.html">应⽤推⼴</a>
#定位href属性中包含“promote.html”的所有a节点
//a[contains(@href,'promote.html')]
#元素内的⽂本为“应⽤推⼴”的所有a节点
//a[text()='应⽤推⼴']
#href属性值是以“/ads”开头的所有a节点
//a[starts-with(@href,'/ads')]
参考:xpath选择器 - moon的博客 - CSDN博客
blog.csdn/qq_32942549/article/details/78400675
三、xpath使⽤实例
1、操作的xml(l)
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
2、需求及代码
选取所有 title
下⾯的例⼦选取所有 title 节点:
/bookstore/book/title
1<html>
2<body>
3<script type="text/javascript">
4function loadXMLDoc(dname)
5 {
6if (window.XMLHttpRequest)
7  {
8  xhttp=new XMLHttpRequest();
9  }
10else
11  {
12  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
13  }
14 xhttp.open("GET",dname,false);
15 xhttp.send("");
sponseXML;
17 }
18
19 xml=loadXMLDoc("/example/l");
20 path="/bookstore/book/title"
21// code for IE
22if (window.ActiveXObject)
23 {
24var nodes=xml.selectNodes(path);
25
26for (i=0;i<nodes.length;i++)
27  {
28  document.write(nodes[i].childNodes[0].nodeValue);
29  document.write("<br />");
xpath语法 python30  }
31 }
32// code for Mozilla, Firefox, Opera, etc.
33else if (document.implementation && ateDocument) 34 {
35var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
36var result=nodes.iterateNext();
37
38while (result)
39  {
40  document.write(result.childNodes[0].nodeValue);
41  document.write("<br />");
42  result=nodes.iterateNext();
43  }
44 }
45</script>
46
47</body>
48</html>
3、结果
Harry Potter
Everyday Italian
Learning XML
XQuery Kick Start

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。