MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment fonctionne EXTRACTVALUE() dans MariaDB

Dans MariaDB, EXTRACTVALUE() est une fonction de chaîne intégrée qui renvoie CDATA à partir d'un fragment XML.

La façon dont cela fonctionne est qu'il accepte deux arguments de chaîne :un fragment de balisage XML et une expression XPath (c'est-à-dire un localisateur). EXTRACTVALUE() puis renvoie le CDATA (c'est-à-dire le texte) du premier nœud de texte qui est un enfant de l'élément ou des éléments correspondant à l'expression XPath.

Syntaxe

La syntaxe ressemble à ceci :

EXTRACTVALUE(xml_frag, xpath_expr)

xml_frag est le fragment XML, et xpath_expr est l'expression XPath à faire correspondre.

Exemple

Voici un exemple de base :

SELECT EXTRACTVALUE('<type>Cat</type>', '/type') AS "Result";

Résultat :

+--------+
| Result |
+--------+
| Cat    |
+--------+

Dans ce cas, le XPath est /type , et donc il renvoie le CDATA (texte) du type élément.

En voici une autre :

SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user') AS "Result";

Résultat :

+--------+
| Result |
+--------+
| Homer  |
+--------+

Dans ce cas, le XPath est /user , et donc EXTRACTVALUE() renvoie le CDATA de l'user élément.

Notez qu'il n'a pas renvoyé le iq élément ou son texte. C'est normal, car EXTRACTVALUE() ne renvoie que le CDATA. Il ne renvoie aucun élément enfant ni aucun texte qu'ils peuvent contenir.

Utiliser l'expression text()

C'est l'équivalent d'obtenir une correspondance en ajoutant le text() explicite expression :

SELECT EXTRACTVALUE('<type>Cat</type>', '/type/text()') AS "Result";

Résultat :

+--------+
| Result |
+--------+
| Cat    |
+--------+

Éléments imbriqués

Voici un exemple d'obtention de CDATA à partir d'un élément imbriqué :

SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user/iq') AS "Result";

Résultat :

+--------+
| Result |
+--------+
| Low    |
+--------+

Ici, nous avons obtenu le CDATA du iq élément, qui est imbriqué dans l'élément user élément. Nous y sommes parvenus en utilisant /user/iq comme XPath.

Aucune correspondance

Si aucun élément de ce type n'existe, rien n'est renvoyé.

Exemple :

SELECT EXTRACTVALUE('<type>Cat</type>', '/name') AS "Result";

Résultat :

+--------+
| Result |
+--------+
|        |
+--------+

C'est également le cas si vous vous trompez d'imbrication.

Exemple :

SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/iq') AS "Result";

Résultat :

+--------+
| Result |
+--------+
|        |
+--------+

Ici, nous avons utilisé /iq comme XPath alors que nous aurions dû utiliser /user/iq .

XML vide

Un document XML vide produira un résultat vide :

SELECT EXTRACTVALUE('', '/name') AS "Result";

Résultat :

+--------+
| Result |
+--------+
|        |
+--------+

XPath vide

Un XPath vide renvoie une erreur :

SELECT EXTRACTVALUE('<type>Cat</type>', '');

Résultat :

ERROR 1105 (HY000): XPATH syntax error: ''

XML nul

Fournir null car le premier argument génère une erreur :

SELECT EXTRACTVALUE(null, '');

Résultat :

ERROR 1105 (HY000): XPATH syntax error: ''

XPath nul

Fournir null car le deuxième argument renvoie null :

SELECT EXTRACTVALUE('<type>Cat</type>', null) AS "Result";

Résultat :

+--------+
| Result |
+--------+
| NULL   |
+--------+

Fournir un seul argument

La fourniture d'un seul argument génère une erreur :

SELECT EXTRACTVALUE('<type>Cat</type>');

Résultat :

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXTRACTVALUE'

Argument manquant

Appel de EXTRACTVALUE() sans passer d'arguments entraîne une erreur :

SELECT EXTRACTVALUE();

Résultat :

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXTRACTVALUE'

Introduction à XML

Pour en savoir plus sur XML, consultez mon didacticiel XML sur Quackit. Ce didacticiel comprend également une introduction à XPath.