MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak działa funkcja EXTRACTVALUE() w MariaDB

W MariaDB, EXTRACTVALUE() jest wbudowaną funkcją ciągu, która zwraca CDATA z fragmentu XML.

Działa to tak, że akceptuje dwa argumenty łańcuchowe:fragment znacznika XML i wyrażenie XPath (tj. lokalizator). EXTRACTVALUE() następnie zwraca CDATA (tj. tekst) pierwszego węzła tekstowego, który jest dzieckiem elementu lub elementów pasujących do wyrażenia XPath.

Składnia

Składnia wygląda tak:

EXTRACTVALUE(xml_frag, xpath_expr)

Gdzie xml_frag jest fragmentem XML, a xpath_expr jest wyrażeniem XPath do dopasowania.

Przykład

Oto podstawowy przykład:

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

Wynik:

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

W tym przypadku ścieżka XPath to /type , a więc zwraca CDATA (tekst) z type element.

Oto kolejny:

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

Wynik:

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

W tym przypadku ścieżka XPath to /user , a więc EXTRACTVALUE() zwraca CDATA od user element.

Zauważ, że nie zwrócił iq elementu lub jego tekstu. Można się tego spodziewać, ponieważ EXTRACTVALUE() zwraca tylko CDATA. Nie zwraca żadnych elementów podrzędnych ani tekstu, który mogą one zawierać.

Korzystanie z wyrażenia text()

Jest to odpowiednik uzyskania dopasowania przez dodanie jawnego text() wyrażenie:

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

Wynik:

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

Elementy zagnieżdżone

Oto przykład pobierania CDATA z elementu zagnieżdżonego:

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

Wynik:

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

Tutaj mamy CDATA z iq element, który jest zagnieżdżony w user element. Osiągnęliśmy to za pomocą /user/iq jako XPath.

Brak dopasowania

Jeśli taki element nie istnieje, nic nie jest zwracane.

Przykład:

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

Wynik:

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

Dzieje się tak również w przypadku nieprawidłowego zagnieżdżenia.

Przykład:

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

Wynik:

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

Tutaj użyliśmy /iq jako XPath, kiedy powinniśmy użyć /user/iq .

Pusty plik XML

Pusty dokument XML da pusty wynik:

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

Wynik:

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

Pusta ścieżka XPath

Pusta ścieżka XPath zwraca błąd:

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

Wynik:

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

Pusty XML

Podanie null ponieważ pierwszy argument powoduje błąd:

SELECT EXTRACTVALUE(null, '');

Wynik:

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

Zerowa ścieżka XPath

Podanie null jako drugi argument zwraca null :

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

Wynik:

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

Podawanie tylko jednego argumentu

Podanie pojedynczego argumentu skutkuje błędem:

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

Wynik:

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

Brakujący argument

Wywołanie EXTRACTVALUE() bez przekazywania jakichkolwiek argumentów powoduje błąd:

SELECT EXTRACTVALUE();

Wynik:

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

Wprowadzenie do XML

Aby uzyskać więcej informacji na temat XML, zobacz mój samouczek XML na Quackit. Ten samouczek zawiera również wprowadzenie do 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. Jak wyświetlić wszystkie lokalizacje w MariaDB

  2. Pełna lista zestawów znaków obsługiwanych przez MariaDB

  3. Jak STRCMP() działa w MariaDB

  4. Jak UTC_TIMESTAMP() działa w MariaDB

  5. 7 sposobów na zwrócenie zduplikowanych wierszy, które mają klucz podstawowy w MariaDB