sql >> Database teknologi >  >> RDS >> MariaDB

Hvordan EXTRACTVALUE() virker i MariaDB

I MariaDB, EXTRACTVALUE() er en indbygget strengfunktion, der returnerer CDATA fra et XML-fragment.

Den måde, det fungerer på, er, at det accepterer to strengargumenter:et fragment af XML-markering og et XPath-udtryk (dvs. en locator). EXTRACTVALUE() returnerer derefter CDATA (dvs. teksten) for den første tekstknude, som er et underordnet element af det eller de elementer, der matcher XPath-udtrykket.

Syntaks

Syntaksen ser sådan ud:

EXTRACTVALUE(xml_frag, xpath_expr)

Hvor xml_frag er XML-fragmentet og xpath_expr er det XPath-udtryk, der skal matche.

Eksempel

Her er et grundlæggende eksempel:

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

Resultat:

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

I dette tilfælde er XPath'en /type , og så returnerer den CDATA (tekst) fra type element.

Her er endnu en:

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

Resultat:

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

I dette tilfælde er XPath /user , og så EXTRACTVALUE() returnerer CDATA'en fra user element.

Bemærk, at det ikke returnerede iq element eller dets tekst. Det kan forventes, fordi EXTRACTVALUE() returnerer kun CDATA. Det returnerer ikke underordnede elementer eller nogen tekst, som de måtte indeholde.

Brug af tekst()-udtrykket

Det svarer til at få et match ved at tilføje den eksplicitte text() udtryk:

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

Resultat:

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

Indlejrede elementer

Her er et eksempel på at få CDATA fra et indlejret element:

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

Resultat:

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

Her fik vi CDATA fra iq element, som er indlejret i user element. Vi opnåede dette ved at bruge /user/iq som XPath.

Ingen match

Hvis der ikke findes et sådant element, returneres intet.

Eksempel:

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

Resultat:

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

Dette er også tilfældet, hvis du tager redet forkert.

Eksempel:

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

Resultat:

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

Her brugte vi /iq som XPath, når vi skulle have brugt /user/iq .

Tøm XML

Et tomt XML-dokument vil producere et tomt resultat:

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

Resultat:

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

Tøm XPath

En tom XPath returnerer en fejl:

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

Resultat:

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

Nul XML

Giver null som det første argument resulterer i en fejl:

SELECT EXTRACTVALUE(null, '');

Resultat:

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

Nul XPath

Giver null da det andet argument returnerer null :

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

Resultat:

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

Giver kun ét argument

Angivelse af et enkelt argument resulterer i en fejl:

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

Resultat:

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

Manglende argument

Kalder EXTRACTVALUE() uden at sende nogen argumenter resulterer det i en fejl:

SELECT EXTRACTVALUE();

Resultat:

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

Introduktion til XML

For mere om XML, se min XML-tutorial på Quackit. Denne vejledning indeholder også en introduktion til XPath.


  1. Sammenkæd en streng og et tal i MySQL

  2. Opret en sammenkædet server i SQL Server (T-SQL-eksempel)

  3. Hvordan bruger du WITH-klausulen i MySQL?

  4. Sådan afsluttes PostgreSQLs Command Line Utility (psql)