MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie EXTRACTVALUE() in MariaDB funktioniert

In MariaDB EXTRACTVALUE() ist eine integrierte Zeichenfolgenfunktion, die CDATA aus einem XML-Fragment zurückgibt.

Es funktioniert so, dass es zwei String-Argumente akzeptiert:ein Fragment von XML-Markup und einen XPath-Ausdruck (d. h. einen Locator). EXTRACTVALUE() gibt dann die CDATA (d. h. den Text) des ersten Textknotens zurück, der ein Kind des Elements oder der Elemente ist, die mit dem XPath-Ausdruck übereinstimmen.

Syntax

Die Syntax lautet wie folgt:

EXTRACTVALUE(xml_frag, xpath_expr)

Wobei xml_frag ist das XML-Fragment und xpath_expr ist der zu vergleichende XPath-Ausdruck.

Beispiel

Hier ist ein einfaches Beispiel:

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

Ergebnis:

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

In diesem Fall ist der XPath /type , und so gibt es die CDATA (Text) aus dem type zurück Element.

Hier ist noch einer:

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

Ergebnis:

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

In diesem Fall lautet der XPath /user , und so EXTRACTVALUE() gibt die CDATA vom user zurück Element.

Beachten Sie, dass iq nicht zurückgegeben wurde Element oder seinen Text. Das ist zu erwarten, denn EXTRACTVALUE() gibt nur die CDATA zurück. Es gibt keine untergeordneten Elemente oder Text zurück, den sie möglicherweise enthalten.

Verwendung des text()-Ausdrucks

Es ist das Äquivalent zum Erhalten einer Übereinstimmung durch Anhängen des expliziten text() Ausdruck:

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

Ergebnis:

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

Verschachtelte Elemente

Hier ist ein Beispiel für das Abrufen von CDATA aus einem verschachtelten Element:

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

Ergebnis:

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

Hier haben wir die CDATA vom iq erhalten -Element, das innerhalb des user verschachtelt ist Element. Wir haben dies erreicht, indem wir /user/iq verwendet haben als XPath.

Keine Übereinstimmung

Wenn kein solches Element existiert, wird nichts zurückgegeben.

Beispiel:

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

Ergebnis:

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

Dies ist auch der Fall, wenn Sie die Verschachtelung falsch machen.

Beispiel:

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

Ergebnis:

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

Hier haben wir /iq verwendet als XPath, obwohl wir /user/iq hätten verwenden sollen .

Leeres XML

Ein leeres XML-Dokument erzeugt ein leeres Ergebnis:

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

Ergebnis:

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

Leerer XPath

Ein leerer XPath gibt einen Fehler zurück:

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

Ergebnis:

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

Null-XML

Bereitstellung von null da das erste Argument zu einem Fehler führt:

SELECT EXTRACTVALUE(null, '');

Ergebnis:

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

Null-XPath

Bereitstellung von null als zweites Argument gibt null zurück :

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

Ergebnis:

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

Nur ein Argument angeben

Die Angabe eines einzelnen Arguments führt zu einem Fehler:

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

Ergebnis:

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

Fehlendes Argument

Aufruf von EXTRACTVALUE() ohne Übergabe von Argumenten ergibt sich ein Fehler:

SELECT EXTRACTVALUE();

Ergebnis:

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

Einführung in XML

Weitere Informationen zu XML finden Sie in meinem XML-Tutorial bei Quackit. Dieses Tutorial enthält auch eine Einführung in XPath.