sql >> Databasteknik >  >> RDS >> MariaDB

Hur EXTRACTVALUE() fungerar i MariaDB

I MariaDB, EXTRACTVALUE() är en inbyggd strängfunktion som returnerar CDATA från ett XML-fragment.

Sättet det fungerar på är att det accepterar två strängargument:ett fragment av XML-uppmärkning och ett XPath-uttryck (d.v.s. en locator). EXTRACTVALUE() returnerar sedan CDATA (dvs. texten) för den första textnoden som är ett underordnat element till elementet eller elementen som matchar XPath-uttrycket.

Syntax

Syntaxen ser ut så här:

EXTRACTVALUE(xml_frag, xpath_expr)

Där xml_frag är XML-fragmentet och xpath_expr är XPath-uttrycket som ska matchas.

Exempel

Här är ett grundläggande exempel:

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

Resultat:

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

I det här fallet är XPath /type , och så returnerar den CDATA (text) från type element.

Här är en till:

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

Resultat:

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

I det här fallet är XPath /user , och så EXTRACTVALUE() returnerar CDATA från user element.

Observera att den inte returnerade iq element eller dess text. Det är att vänta, eftersom EXTRACTVALUE() returnerar endast CDATA. Det returnerar inte några underordnade element eller någon text som de kan innehålla.

Använda text()-uttrycket

Det motsvarar att få en matchning genom att lägga till den explicita text() uttryck:

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

Resultat:

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

Inkapslade element

Här är ett exempel på hur du hämtar CDATA från ett kapslat element:

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

Resultat:

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

Här fick vi CDATA från iq element, som är kapslat inuti user element. Vi uppnådde detta genom att använda /user/iq som XPath.

Ingen match

Om inget sådant element finns returneras inget.

Exempel:

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

Resultat:

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

Detta är också fallet om du gör fel.

Exempel:

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

Resultat:

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

Här använde vi /iq som XPath när vi borde ha använt /user/iq .

Töm XML

Ett tomt XML-dokument ger ett tomt resultat:

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

Resultat:

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

Töm XPath

En tom XPath returnerar ett fel:

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

Resultat:

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

Null XML

Tillhandahåller null som det första argumentet resulterar i ett fel:

SELECT EXTRACTVALUE(null, '');

Resultat:

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

Null XPath

Tillhandahåller null eftersom det andra argumentet returnerar null :

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

Resultat:

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

Ge bara ett argument

Att tillhandahålla ett enda argument resulterar i ett fel:

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

Resultat:

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

Argument saknas

Anropar EXTRACTVALUE() utan att skicka några argument resulterar i ett fel:

SELECT EXTRACTVALUE();

Resultat:

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

Introduktion till XML

För mer om XML, se min XML-handledning på Quackit. Den självstudien innehåller också en introduktion till XPath.


  1. Hur lägger man till anpassade attribut till SQL-anslutningssträngen?

  2. mysql_fetch_array, mysql_fetch_assoc, mysql_fetch_object

  3. Flytta till MariaDB Backup

  4. Hur man krypterar en användardefinierad funktion i SQL Server