MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Bagaimana EXTRACTVALUE() Bekerja di MariaDB

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggabungkan Kekuatan SQL dan Pernyataan Prosedural dengan Mode Kompatibilitas Oracle MariaDB

  2. Bagaimana MID() Bekerja di MariaDB

  3. Bagaimana RTRIM_ORACLE() Bekerja di MariaDB

  4. MariaDB JSON_LENGTH() Dijelaskan

  5. Apa yang Harus Diperiksa jika Pemanfaatan I/O MySQL Tinggi?