MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como EXTRACTVALUE() funciona no MariaDB


No MariaDB, EXTRACTVALUE() é uma função de string interna que retorna CDATA de um fragmento XML.

A maneira como funciona é que ele aceita dois argumentos de string:um fragmento de marcação XML e uma expressão XPath (ou seja, um localizador). EXTRACTVALUE() em seguida, retorna o CDATA (ou seja, o texto) do primeiro nó de texto que é filho do elemento ou elementos correspondentes à expressão XPath.

Sintaxe


A sintaxe fica assim:
EXTRACTVALUE(xml_frag, xpath_expr)

Onde xml_frag é o fragmento XML e xpath_expr é a expressão XPath para corresponder.

Exemplo


Segue um exemplo básico:
SELECT EXTRACTVALUE('<type>Cat</type>', '/type') AS "Result";

Resultado:
+--------+
| Result |
+--------+
| Cat    |
+--------+

Neste caso, o XPath é /type , e assim retorna o CDATA (texto) do type elemento.

Aqui está mais um:
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user') AS "Result";

Resultado:
+--------+
| Result |
+--------+
| Homer  |
+--------+

Neste caso, o XPath é /user , e assim EXTRACTVALUE() retorna o CDATA do user elemento.

Observe que ele não retornou o iq elemento ou seu texto. Isso é esperado, porque EXTRACTVALUE() apenas retorna o CDATA. Ele não retorna nenhum elemento filho ou qualquer texto que eles possam conter.

Usando a expressão text()


É o equivalente a obter uma correspondência anexando o text() explícito expressão:
SELECT EXTRACTVALUE('<type>Cat</type>', '/type/text()') AS "Result";

Resultado:
+--------+
| Result |
+--------+
| Cat    |
+--------+

Elementos aninhados


Aqui está um exemplo de como obter CDATA de um elemento aninhado:
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user/iq') AS "Result";

Resultado:
+--------+
| Result |
+--------+
| Low    |
+--------+

Aqui, pegamos o CDATA do iq elemento, que está aninhado dentro do user elemento. Conseguimos isso usando /user/iq como o XPath.

Sem correspondência


Se não existir tal elemento, nada será retornado.

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

Resultado:
+--------+
| Result |
+--------+
|        |
+--------+

Este também é o caso se você errar o aninhamento.

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

Resultado:
+--------+
| Result |
+--------+
|        |
+--------+

Aqui, usamos /iq como o XPath quando deveríamos ter usado /user/iq .

XML vazio


Um documento XML vazio produzirá um resultado vazio:
SELECT EXTRACTVALUE('', '/name') AS "Result";

Resultado:
+--------+
| Result |
+--------+
|        |
+--------+

XPath vazio


Um XPath vazio retorna um erro:
SELECT EXTRACTVALUE('<type>Cat</type>', '');

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

XML nulo


Fornecendo null como o primeiro argumento resulta em um erro:
SELECT EXTRACTVALUE(null, '');

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

XPath Nulo


Fornecendo null como o segundo argumento retorna null :
SELECT EXTRACTVALUE('<type>Cat</type>', null) AS "Result";

Resultado:
+--------+
| Result |
+--------+
| NULL   |
+--------+

Fornecendo apenas um argumento


Fornecer um único argumento resulta em um erro:
SELECT EXTRACTVALUE('<type>Cat</type>');

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

Argumento ausente


Chamando EXTRACTVALUE() sem passar nenhum argumento resulta em um erro:
SELECT EXTRACTVALUE();

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

Introdução ao XML


Para saber mais sobre XML, veja meu Tutorial de XML no Quackit. Esse tutorial também inclui uma introdução ao XPath.