📅  最后修改于: 2023-12-03 14:52:22.670000             🧑  作者: Mango
XPath 是一种在 XML 和 HTML 中定位元素的语言,可以使用 JavaScript 来解析和操作 XPath。与使用 DOM 相比,XPath 更加方便快捷,可以在不考虑文档结构的情况下轻松定位元素。本文将介绍如何在 JavaScript 中访问 XPath。
首先,我们需要获取 XPath 表达式,也就是描述元素位置和属性的字符串。使用浏览器的开发者工具可以轻松获取 XPath 表达式,具体步骤如下:
此时,已将该元素的 XPath 表达式复制到了剪贴板中。
在 JavaScript 中使用 XPath 定位元素,需要借助 DOMParser 和 document.evaluate 方法。DOMParser 可以将字符串转换成 DOM 对象,而 document.evaluate 方法可以使用 XPath 表达式来选择元素。
下面是一个例子,假设我们要获取页面中第一个 p 标签的内容:
// 获取第一个 p 标签的 XPath 表达式
var xpath = '/html/body/p[1]';
// 创建 DOMParser 对象
var parser = new DOMParser();
// 将 HTML 字符串转换为 DOM 对象
var doc = parser.parseFromString(document.documentElement.outerHTML, 'text/html');
// 在 doc 中使用 XPath 定位元素
var elem = doc.evaluate(xpath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
// 获取元素内容
var content = elem.textContent;
console.log(content);
在上面的例子中,我们首先获取了第一个 p 标签的 XPath 表达式,并创建了一个 DOMParser 对象。然后,将页面 HTML 字符串解析为 DOM 对象,并使用 evaluate 方法在 DOM 对象中定位元素。最后,获取元素的文本内容并输出。
除了定位单个元素,XPath 可以使用轴来遍历多个元素。例如,我们可以使用 XPath 表达式 /html/body//a
来获取页面中所有的链接。
下面是一个例子,假设我们要获取页面中所有链接的 href 属性:
// 获取所有链接的 XPath 表达式
var xpath = '/html/body//a';
// 创建 DOMParser 对象
var parser = new DOMParser();
// 将 HTML 字符串转换为 DOM 对象
var doc = parser.parseFromString(document.documentElement.outerHTML, 'text/html');
// 在 doc 中使用 XPath 遍历元素
var elems = doc.evaluate(xpath, doc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
// 遍历元素并获取 href 属性
var elem;
var urls = [];
while (elem = elems.iterateNext()) {
urls.push(elem.href);
}
console.log(urls);
在上面的例子中,我们首先获取了所有链接的 XPath 表达式,并创建了一个 DOMParser 对象。然后,将页面 HTML 字符串解析为 DOM 对象,并使用 evaluate 方法在 DOM 对象中遍历元素。最后,遍历元素并获取其 href 属性,并将所有链接的 href 属性存储到一个数组中。