MariaDB UPDATEXML() 函数使用指南

在 MariaDB 中,UPDATEXML() 是一个内置函数,它使用新的 XML 片段替换原 XML 文档中指定的部分。

MariaDB UPDATEXML() 语法

这里是 MariaDB UPDATEXML() 的语法:

UPDATEXML(xml_doc, xpath_expr)

参数

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

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

返回值

MariaDB UPDATEXML() 函数返回更新后的 XML 文档,它将通过 xpath_expr 指定的内容替换为 new_xml

如果原 XML 文档中不存在指定的 XPATH 路径,UPDATEXML() 将返回原 xml 文档。

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

MariaDB UPDATEXML() 示例

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

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

基本示例

要将用户 id 更新为新的值 987654321,请使用下面的语句:

SELECT
  UPDATEXML(@xml, '/user/id', '<id>987654321</id>');

输出:

<user>
  <id>987654321</id>
  <name>Alice</name>
  <age>15</age>
  <hobbies>Piano<hobby>Football</hobby></hobbies>
</user>

您可以将节点更新为任何内容:

SELECT
  UPDATEXML(@xml, '/user/id', '<any>what</any>');

输出:

<user>
  <any>what</any>
  <name>Alice</name>
  <age>15</age>
  <hobbies>Piano<hobby>Football</hobby></hobbies>
</user>

路径不存在

如果原 XML 文档中不存在指定的 XPATH 路径,UPDATEXML() 将返回原 xml 文档。

SELECT
  UPDATEXML(@xml, '/user/nothing', '<any>what</any>');

输出:

<user>
  <id>123456789</id>
  <name>Alice</name>
  <age>15</age>
  <hobbies>Piano<hobby>Football</hobby></hobbies>
</user>

结论

在 MariaDB 中,UPDATEXML() 是一个内置函数,它使用新的 XML 片段替换原 XML 文档中指定的部分。