MariaDB EXTRACTVALUE() 函数使用指南

在 MariaDB 中,EXTRACTVALUE() 是一个内置函数,它根据给定的路径从给定的 XML 片段中提取值。

MariaDB UPDATEXML() 语法

这里是 MariaDB UPDATEXML() 的语法:

UPDATEXML(xml_frag, xpath_expr)

参数

xml_frag
必需的。一个作为字符串的 XML 片段。
如果您提供了一个非法的 XML 片段,MariaDB 将给出一个警告: Warning (Code 1525): Incorrect XML value: 'parse error at line 1 pos 11: unexpected END-OF-INPUT'
xpath_expr
必需的。需要提取值的 XML 路径表达式。
如果这是一个非法的 XPATH 值,MariaDB 将报告一个错误: ERROR 1105 (HY000): XPATH syntax error: ')'

如果您提供了错误数量的参数,MariaDB 将报告一个错误: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXTRACTVALUE'

返回值

MariaDB UPDATEXML() 函数返回一个字符串,它是在 XML 片段中的指定 XPATH 路径上的文本值。它只返回 XPATH 路径的值,不返回节点。

如果 XML 片段中不存在指定的 XPATH 路径,UPDATEXML() 将返回一个空字符串 ''

如果任意一个参数为 NULLUPDATEXML() 函数将返回 NULL

MariaDB UPDATEXML() 示例

这里先定义个 XML 片段以供演示:

SET @xml = '
<user>
  <id>123456789</id>
  <name>Alice</name>
  <age>15</age>
  <hobbies>Piano<hobby>Football</hobby></hobbies>
</user>
';

基本示例

这个示例展示了 MariaDB UPDATEXML() 函数的基本用法:

SELECT
  EXTRACTVALUE(@xml, '/user/id') id,
  EXTRACTVALUE(@xml, '/user/name') name,
  EXTRACTVALUE(@xml, '/user/age') age;

输出:

+-----------+-------+------+
| id        | name  | age  |
+-----------+-------+------+
| 123456789 | Alice | 15   |
+-----------+-------+------+

文本值

MariaDB UPDATEXML() 函数只返回 XPATH 路径中的文本值,不包含子节点。

SELECT EXTRACTVALUE(@xml, '/user/hobbies') hobbies;

输出:

+---------+
| hobbies |
+---------+
| Piano   |
+---------+

在本例中,XPath 是 /user/hobbies,虽然其包含子节点 Piano<hobby>Football</hobby>,但是该函数只返回了文本值。

这等效于您直接在 XPATH 表达式中使用 text(),如下:

SELECT EXTRACTVALUE(@xml, '/user/hobbies/text()') hobbies;

输出:

+---------+
| hobbies |
+---------+
| Piano   |
+---------+

无匹配

如果 XML 片段中不存在指定的 XPATH 路径,UPDATEXML() 将返回一个空字符串 ''

SELECT EXTRACTVALUE(@xml, '/user/gender');

输出:

+------------------------------------+
| EXTRACTVALUE(@xml, '/user/gender') |
+------------------------------------+
|                                    |
+------------------------------------+

结论

在 MariaDB 中,EXTRACTVALUE() 是一个内置函数,它根据给定的路径从给定的 XML 片段中提取值。