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.