Xpath是一种在使用标记语言构成的文档中查询元素的语言,XML和HTML都是标记语言,因此使用Xpath可以在XML和HTML文档中查询元素。
在标记语言中,标记也称为标签(也可以称为文档的元素),在Xpath中称为节点,标记一般是成对的,有起始标签和结束标签,在起始标签和结束标签之间是标签的内容,内容可以包含标签和文本信息。
例如:
<html> <head>……</head> <body> <div>……</div> …… <div>……</div> </body> </html>
案例是一个基本的HTML文档结构,案例给出的标签有<html>、<head>、<body>、<div>,当然还有很多的HTML标签案例没有列出。
标签一般都是成对的,<html>是起始标签,</html>是结束标签。
HTML文档是一个层级结构,层级数量没有限制,文档中的同级标签为一层,标签也称为节点。
<html>标签是根节点,是HTML文档的第一层,<head>标签和<body>标签是<html>根节点的子节点,是HTML文档的第二层,<body>节点内的<div>节点是<body>节点的子节点,是HTML文档的第三层,同级的<div>节点是兄弟节点,在<div>节点下还可以有子节点。
XPath的节点
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点。我们主要关注元素、属性、文本、文档节点。
<html> <head> <title>我的第一个网页</title> </head> <body> <h1>这是第一个网页</h1> <hr> <p class=“c1”>这是一个段落</p> </boyd> </html>
在上面的HTML文档中:
<html>标签是文档节点。
<head>、<body>、<h1>、<hr>、<p class=“c1”>是元素节点。
class=“c1”是元素节点<P>的属性节点。
元素节点内的文本是文本节点。
XPath的节点关系
XPath的节点关系有父关系(parent)、子关系(children)、兄弟关系(sibling)、先辈关系(ancestor)、后代关系(descendant)。
(1)父关系(parent)
文档节点除外,每个元素节点都有直接的上层节点,元素节点与直接的上层节点的关系就是父关系,元素节点的直接上层节点也称为该元素的父节点。
例如:
<head>、<body>、<h1>等节点和<html>节点就是父关系,<html>是这些节点的父节点。
<h1>、<hr>、<p>节点和<body>节点是父关系,<body>节点是这些节点的父节点。
(2)子关系(children)
元素节点的直接下层节点与该元素节点为子关系,元素节点的直接下层节点也称为该元素的子节点。
例如:
<body>的子节点有<h1>、<hr>、<p>节点。
(3)兄弟关系(sibling)
同层的元素节点为兄弟关系,这些元素节点也称为兄弟节点。
例如:
<h1>、<hr>、<p>这些节点是兄弟节点。
(4)先辈关系(ancestor)
元素节点父节点的父节点、……,与该元素节点是先辈关系,这些元素节点也称为该元素节点的先辈节点。
例如:
<h1>、<hr>、<p>节点的先辈节点是<html>文档节点。
(5)后代关系(descendant)
元素节点子节点的子节点、……,与该元素节点是后代关系,这些元素节点也称为该元素节点的后代节点。
例如:
<html>文档节点的后代节点有<h1>、<hr>、<p>节点。