npm 包 xpath.js 使用教程

阅读时长 7 分钟读完

前言

在前端开发中,很多时候我们需要从 HTML 或 XML 文档中提取数据。在这种情况下,XPath 是一个非常强大和方便的工具。有了 XPath,我们可以通过一些表达式来定位我们需要的节点,而不需要从头开始遍历文档。

在 JavaScript 中,npm 包 xpath.js 是一个流行的 XPath 库,它可以让前端工程师更加容易地使用 XPath 定位和提取数据。在本文中,我们将深入介绍如何使用 xpath.js 包来进行 XPath 数据提取。

安装

在开始使用 xpath.js 之前,我们需要首先安装它。您可以通过以下命令在您的项目中安装:

安装完成后,即可正常使用这个库。

基本使用

首先,我们需要通过 DOMParser 将 XML 或 HTML 文档加载为 DOM 文档。您可以通过以下代码来实现:

假设您已经加载了您要提取数据的文档,我们可以使用 xpath.js 提供的 select 函数来查找我们想要的节点。例如,如果您想查找所有名称为 book 的节点,可以执行以下代码:

这个函数接受一个 XPath 表达式作为参数,并返回匹配该表达式的节点集合。在这个例子中,我们使用的简单 XPath 表达式 //book 表示选择所有名称为 book 的节点。

如果您只需要第一个匹配的节点,可以使用 select1 函数。例如,如果您只需要第一个名称为 book 的节点,可以执行以下代码:

在这个例子中,我们使用的是 selectSingleNode 函数。它与 select 函数的不同之处在于它只返回第一个匹配节点。

XPath 表达式

在 XPath 中,存在很多不同类型的表达式,可以实现对节点的选择和提取。

节点选择

您可以使用以下表达式来选择特定类型的节点:

  • *:选择所有节点。
  • nodeName:选择拥有特定节点名称的节点。
  • @attributeName:选择拥有特定属性名称的节点。

例如,选择所有节点是非常简单的,只需要使用 * 表达式即可:

在这个例子中,我们选择了所有节点。

另外一个常见的情况是选择特定名称的节点,例如选择所有名称为 book 的节点:

在这个例子中,我们使用了 //book XPath 表达式来选择名称为 book 的节点。如果要选择某个特定节点的某个属性,例如选择所有带有 isbn 属性的节点,可以使用以下表达式:

在这个例子中,我们使用了 //*[@isbn] 路径表达式来选择带有 isbn 属性的所有节点。

路径表达式

XPath 还支持路径表达式,可以使用它们来选择节点的子集。

例如,如果您想选择名称为 book 的节点下的所有子元素,则可以使用以下表达式:

在这个例子中,我们使用了 //book/* 路径表达式来选择所有名称为 book 的节点下的所有子元素。

运算符

XPath 还有一些内置运算符,可以帮助您更精准地选择特定的节点。

以下是一些常用的 XPath 运算符:

  • and:逻辑 AND 运算符。
  • or:逻辑 OR 运算符。
  • not:逻辑 NOT 运算符。
  • =:等于运算符。
  • !=:不等于运算符。
  • >:大于运算符。
  • >=:大于等于运算符。
  • <:小于运算符。
  • <=:小于等于运算符。
  • +:加法运算符。
  • -:减法运算符。
  • *:乘法运算符。
  • /:除法运算符。
  • %:取模运算符。

例如,如果您想选择价格大于 $40 的所有书籍,则可以使用以下表达式:

在这个例子中,我们使用了 XPath 运算符 > 来选择价格大于 40 的书籍。

函数

XPath 也有许多内置函数,可以帮助我们更方便地选择和操作节点。

以下是一些常用的 XPath 函数:

  • contains(string, substring):判断指定字符串是否包含某个子串。
  • starts-with(string, substring):判断指定字符串是否以某个子串开头。
  • ends-with(string, substring):判断指定字符串是否以某个子串结尾。
  • string-length(string):返回指定字符串的长度。
  • substring(string, start, length):返回指定字符串的子串。
  • count(nodeset):返回指定节点集合中节点的数量。
  • sum(nodeset):返回指定节点集合中的所有数值之和。
  • floor(number):返回指定数字的下限整数部分。
  • ceiling(number):返回指定数字的上限整数部分。
  • round(number):返回指定数字的四舍五入整数部分。

例如,如果您想选择所有包含 JavaScript 关键词的书籍,则可以使用以下表达式:

在这个例子中,我们使用了 XPath 函数 contains 来选择所有包含 JavaScript 关键词的书籍。

示例代码

下面是一个完整的示例,演示如何使用 xpath.js 包来从 XML 文档中提取数据。

-- -------------------- ---- -------
----- ------ - --- ------------
----- ------ - --------------------------------- ------------

----- ----- - -----------------------------

--- ---- - - -- - - ------------- ---- -
  ----- ----- - -----------------------------------------------
  ----- ------ - ------------------------------------------------
  ----- ----- - -----------------------------------------------

  ------------------- --------- ------- ---------- ------ -----------
-

在这个例子中,我们首先使用 DOMParserxmlString 加载为 DOM 文档。然后,我们使用 selectNodes 函数选择所有名称为 book 的节点,并使用 for 循环迭代每个节点。在循环中,我们使用 selectSingleNode 函数选择每个节点中的 titleauthorprice 元素,并使用 textContent 属性来获取它们的值。最后,我们将这些值输出到控制台。

结论

XPath.js 是一个非常强大和方便的 XPath 库,它可以帮助前端开发人员更方便地提取 XML 和 HTML 文档中的数据。本文中,我们介绍了如何使用 xpath.js 包来进行 XPath 数据提取,并通过一系列实例展示了 XPath 表达式、路径表达式、运算符和函数的使用方法。我们希望这篇文章能够帮助您更好地理解 xpath.js 并使用它来加速您的前端开发工作。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/xpath-js