Di MariaDB, EXTRACTVALUE()
adalah fungsi string bawaan yang mengembalikan CDATA dari fragmen XML.
Cara kerjanya adalah ia menerima dua argumen string:fragmen markup XML dan ekspresi XPath (yaitu pencari). EXTRACTVALUE()
kemudian mengembalikan CDATA (yaitu teks) dari simpul teks pertama yang merupakan anak dari elemen atau elemen yang cocok dengan ekspresi XPath.
Sintaks
Sintaksnya seperti ini:
EXTRACTVALUE(xml_frag, xpath_expr)
Dimana xml_frag
adalah fragmen XML, dan xpath_expr
adalah ekspresi XPath yang cocok.
Contoh
Berikut ini contoh dasarnya:
SELECT EXTRACTVALUE('<type>Cat</type>', '/type') AS "Result";
Hasil:
+--------+ | Result | +--------+ | Cat | +--------+
Dalam hal ini, XPath adalah /type
, dan mengembalikan CDATA (teks) dari type
elemen.
Ini satu lagi:
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user') AS "Result";
Hasil:
+--------+ | Result | +--------+ | Homer | +--------+
Dalam hal ini, XPath adalah /user
, dan jadi EXTRACTVALUE()
mengembalikan CDATA dari user
elemen.
Perhatikan bahwa itu tidak mengembalikan iq
elemen atau teksnya. Itu sudah diduga, karena EXTRACTVALUE()
hanya mengembalikan CDATA. Itu tidak mengembalikan elemen turunan apa pun atau teks apa pun yang mungkin ada di dalamnya.
Menggunakan Teks() Ekspresi
Ini setara dengan mendapatkan kecocokan dengan menambahkan text()
explicit eksplisit ekspresi:
SELECT EXTRACTVALUE('<type>Cat</type>', '/type/text()') AS "Result";
Hasil:
+--------+ | Result | +--------+ | Cat | +--------+
Elemen Bertingkat
Berikut ini contoh mendapatkan CDATA dari elemen bersarang:
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user/iq') AS "Result";
Hasil:
+--------+ | Result | +--------+ | Low | +--------+
Di sini, kami mendapatkan CDATA dari iq
elemen, yang bersarang di dalam user
elemen. Kami mencapai ini dengan menggunakan /user/iq
sebagai XPath.
Tidak Cocok
Jika tidak ada elemen seperti itu, tidak ada yang dikembalikan.
Contoh:
SELECT EXTRACTVALUE('<type>Cat</type>', '/name') AS "Result";
Hasil:
+--------+ | Result | +--------+ | | +--------+
Ini juga terjadi jika Anda salah membuat sarang.
Contoh:
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/iq') AS "Result";
Hasil:
+--------+ | Result | +--------+ | | +--------+
Di sini, kami menggunakan /iq
sebagai XPath ketika kita seharusnya menggunakan /user/iq
.
XML Kosong
Dokumen XML kosong akan menghasilkan hasil kosong:
SELECT EXTRACTVALUE('', '/name') AS "Result";
Hasil:
+--------+ | Result | +--------+ | | +--------+
Xpath Kosong
XPath kosong mengembalikan kesalahan:
SELECT EXTRACTVALUE('<type>Cat</type>', '');
Hasil:
ERROR 1105 (HY000): XPATH syntax error: ''
Null XML
Memberikan null
karena argumen pertama menghasilkan kesalahan:
SELECT EXTRACTVALUE(null, '');
Hasil:
ERROR 1105 (HY000): XPATH syntax error: ''
XPath Null
Memberikan null
karena argumen kedua mengembalikan null
:
SELECT EXTRACTVALUE('<type>Cat</type>', null) AS "Result";
Hasil:
+--------+ | Result | +--------+ | NULL | +--------+
Menyediakan Hanya Satu Argumen
Memberikan satu argumen menghasilkan kesalahan:
SELECT EXTRACTVALUE('<type>Cat</type>');
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXTRACTVALUE'
Argumen Tidak Ada
Memanggil EXTRACTVALUE()
tanpa meneruskan argumen apa pun menghasilkan kesalahan:
SELECT EXTRACTVALUE();
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXTRACTVALUE'
Pengantar XML
Untuk lebih lanjut tentang XML, lihat Tutorial XML saya di Quackit. Tutorial itu juga mencakup Pengantar XPath.