Xpath的使用以及进阶
一、xpath介绍
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
- XPath 使用路径表达式在 XML 文档中进行导航
- XPath 包含一个标准函数库
- XPath 是 XSLT 中的主要元素
- XPath 是一个 W3C 标准
二 、xpath简单语法
表达式 | 描述 |
---|---|
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点 |
… | 选取当前节点的父节点 |
@ | 选取当前节点的属性值 |
丨 | 这个表达式用于在多个xpath语句中使用,互不影响 |
XML 实例文档
我们将在下面的例子中使用这个 XML 文档。
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="one">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="two">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
表达式 | 描述 |
---|---|
//book | 匹配所有的book节点(不论在哪个位置) |
//book/title | 匹配所有的book节点下的title节点 |
//book/title/text() | 匹配book节点下的title节点的文本内容 |
//book[1] | 匹配第一个book节点 |
//book/title[@lang=‘one’] | 匹配book节点下的title中lang属性为’one’的节点 |
//title/…/price | 匹配所有title父节点的price节点 |
三 、xpath高级进阶
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>xpath</title>
</head>
<body>
div price="99.8">
<div>
<ul>
<li>时间</li>
<li>地点</li>
<li>任务</li>
</ul>
</div>
<div id='testid' data-h="first">
<h2>这里是个小标题</h2>
<ol>
<li data="one">1</li>
<li data="two">2</li>
<li data="three">3</li>
</ol>
<ul>
<li code="84">84</li>
<li code="104">104</li>
<li code="223">223</li>
</ul>
</div>
<div>
<h3>这里是H3的内容
<a href="http://www.baidu.com">百度一下</a>
<ul>
<li>test1</li>
<li>test2</li>
</ul>
</h3>
</div>
<div id="go">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ul>
</div>
</div>
</body>
</html>
表达式 | 描述 |
---|---|
//div[not(@id=“go”)] | 匹配所有div节点且含有的属性不包含id=“go” |
//ul//li[contains(string(),‘9’)]] | 匹配所有ul下的li节点且文本内容中包含’9’ 注释:contains关键字表示文本包含, string()表示字符串, '9’为包含的文本内容 |
//div[@id=“go”]/ul//li[3]/following-sibling::li | 匹配id='go’的div节点下的ul节点下的第三个li节点下的所有li兄弟节点 |
//ul//li[position()>5] | 匹配ul节点下所有li节点,且不选择前五个节点 |
//div/attribute::id | 匹配所有div节点的所有id属性 |
//div[@id]/self::div[@data-h]/attribute:😗 | 匹配带id属性值当前节点的div中包含data-h属性的标签的所有属性值 |
//div[position()>1][@data-h=“first”]/ul//li[1]/following-sibling::li/text() | 匹配除第一个div的所有div且属性data-h的值为’first’节点下的ul节点下的第一个li节点的所有兄弟节点的值 |