MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Cách hoạt động của EXTRACTVALUE () trong MariaDB

Trong MariaDB, EXTRACTVALUE() là một hàm chuỗi tích hợp trả về CDATA từ một phân đoạn XML.

Cách thức hoạt động là nó chấp nhận hai đối số chuỗi:một đoạn đánh dấu XML và một biểu thức XPath (tức là một bộ định vị). EXTRACTVALUE() sau đó trả về CDATA (tức là văn bản) của nút văn bản đầu tiên là nút con của phần tử hoặc các phần tử khớp với biểu thức XPath.

Cú pháp

Cú pháp như sau:

EXTRACTVALUE(xml_frag, xpath_expr)

Ở đâu xml_frag là phân đoạn XML và xpath_expr là biểu thức XPath để đối sánh.

Ví dụ

Đây là một ví dụ cơ bản:

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

Kết quả:

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

Trong trường hợp này, XPath là /type và do đó nó trả về CDATA (văn bản) từ loại type phần tử.

Đây là một cái khác:

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

Kết quả:

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

Trong trường hợp này, XPath là /user và vì vậy EXTRACTVALUE() trả về CDATA từ user phần tử.

Lưu ý rằng nó không trả về iq phần tử hoặc văn bản của nó. Điều đó được mong đợi, bởi vì EXTRACTVALUE() chỉ trả về CDATA. Nó không trả về bất kỳ phần tử con nào hoặc bất kỳ văn bản nào mà chúng có thể chứa.

Sử dụng biểu thức text ()

Nó tương đương với việc nhận được một kết quả phù hợp bằng cách thêm vào text() rõ ràng biểu thức:

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

Kết quả:

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

Các phần tử lồng nhau

Dưới đây là một ví dụ về việc lấy CDATA từ một phần tử lồng nhau:

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

Kết quả:

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

Ở đây, chúng tôi nhận được CDATA từ iq phần tử được lồng bên trong user thành phần. Chúng tôi đã đạt được điều này bằng cách sử dụng /user/iq dưới dạng XPath.

Không phù hợp

Nếu không có phần tử nào như vậy tồn tại, không có gì được trả về.

Ví dụ:

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

Kết quả:

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

Đây cũng là trường hợp nếu bạn đặt sai lồng.

Ví dụ:

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

Kết quả:

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

Ở đây, chúng tôi đã sử dụng /iq dưới dạng XPath mà lẽ ra chúng ta nên sử dụng /user/iq .

XML trống

Một tài liệu XML trống sẽ tạo ra một kết quả trống:

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

Kết quả:

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

XPath trống

XPath trống trả về lỗi:

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

Kết quả:

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

Null XML

Cung cấp null vì đối số đầu tiên dẫn đến lỗi:

SELECT EXTRACTVALUE(null, '');

Kết quả:

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

XPath không có giá trị

Cung cấp null khi đối số thứ hai trả về null :

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

Kết quả:

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

Chỉ đưa ra một lập luận

Việc cung cấp một đối số duy nhất dẫn đến lỗi:

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

Kết quả:

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

Thiếu đối số

Gọi EXTRACTVALUE() mà không chuyển bất kỳ đối số nào dẫn đến lỗi:

SELECT EXTRACTVALUE();

Kết quả:

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

Giới thiệu về XML

Để biết thêm về XML, hãy xem Hướng dẫn về XML của tôi tại Quackit. Hướng dẫn đó cũng bao gồm Giới thiệu về 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. Cách SUBTIME () hoạt động trong MariaDB

  2. Xử lý các vấn đề sao chép từ các cụm cơ sở dữ liệu MariaDB không phải GTID sang GTID MariaDB

  3. Cách bảo vệ cơ sở dữ liệu MySQL &MariaDB của bạn trước các cuộc tấn công mạng khi ở trên mạng công cộng

  4. MariaDB FOUND_ROWS () Giải thích

  5. Di chuyển từ Cơ sở dữ liệu Oracle sang MariaDB - Một bước tiến sâu