sql >> Databáze >  >> RDS >> MariaDB

Jak EXTRACTVALUE() funguje v MariaDB

V MariaDB EXTRACTVALUE() je vestavěná řetězcová funkce, která vrací CDATA z fragmentu XML.

Funguje to tak, že přijímá dva řetězcové argumenty:fragment značky XML a výraz XPath (tj. lokátor). EXTRACTVALUE() pak vrátí CDATA (tj. text) prvního textového uzlu, který je potomkem prvku nebo prvků odpovídajících výrazu XPath.

Syntaxe

Syntaxe vypadá takto:

EXTRACTVALUE(xml_frag, xpath_expr)

Kde xml_frag je fragment XML a xpath_expr je odpovídající výraz XPath.

Příklad

Zde je základní příklad:

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

Výsledek:

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

V tomto případě je XPath /type , a tak vrací CDATA (text) z type prvek.

Tady je další:

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

Výsledek:

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

V tomto případě je XPath /user a tak EXTRACTVALUE() vrátí CDATA od user prvek.

Všimněte si, že nevrátil iq prvek nebo jeho text. To se dalo očekávat, protože EXTRACTVALUE() vrátí pouze CDATA. Nevrací žádné podřízené prvky ani žádný text, který mohou obsahovat.

Použití výrazu text()

Je to ekvivalent získání shody připojením explicitního text() výraz:

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

Výsledek:

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

Vnořené prvky

Zde je příklad získání CDATA z vnořeného prvku:

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

Výsledek:

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

Zde jsme získali CDATA z iq prvek, který je vnořen do user živel. Dosáhli jsme toho pomocí /user/iq jako XPath.

Žádná shoda

Pokud žádný takový prvek neexistuje, nic se nevrací.

Příklad:

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

Výsledek:

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

To platí také v případě, že vnoření uděláte špatně.

Příklad:

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

Výsledek:

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

Zde jsme použili /iq jako XPath, když jsme měli použít /user/iq .

Vyprázdnit soubor XML

Prázdný dokument XML vytvoří prázdný výsledek:

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

Výsledek:

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

Vyprázdněte cestu XPath

Prázdná cesta XPath vrátí chybu:

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

Výsledek:

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

Nulové XML

Poskytování null jako první argument vede k chybě:

SELECT EXTRACTVALUE(null, '');

Výsledek:

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

Nová cesta XPath

Poskytování null jako druhý argument vrátí null :

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

Výsledek:

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

Poskytování pouze jednoho argumentu

Poskytnutí jediného argumentu má za následek chybu:

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

Výsledek:

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

Chybí argument

Volání EXTRACTVALUE() bez předání jakýchkoli argumentů dojde k chybě:

SELECT EXTRACTVALUE();

Výsledek:

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

Úvod do XML

Více o XML najdete v mém XML Tutorial na Quackit. Tento tutoriál také obsahuje Úvod do XPath.


  1. Jak převést IPv6 z binárního kódu pro úložiště v MySQL

  2. Jak nainstalovat MariaDB 10 na Debian a Ubuntu

  3. Jak zjistit a zabránit neočekávanému nárůstu SQL Server databáze TempDB

  4. Vlastní kalendář a připomenutí pro Android