MariaDBでは、EXTRACTVALUE() XMLフラグメントからCDATAを返す組み込みの文字列関数です。
それが機能する方法は、2つの文字列引数を受け入れることです:XMLマークアップのフラグメントとXPath式(つまり、ロケーター)。 EXTRACTVALUE() 次に、XPath式に一致する1つまたは複数の要素の子である最初のテキストノードのCDATA(つまりテキスト)を返します。
構文
構文は次のようになります:
EXTRACTVALUE(xml_frag, xpath_expr)
xml_fragの場所 はXMLフラグメントであり、xpath_expr 一致するXPath式です。
例
基本的な例は次のとおりです。
SELECT EXTRACTVALUE('<type>Cat</type>', '/type') AS "Result"; 結果:
+--------+ | Result | +--------+ | Cat | +--------+
この場合、XPathは/typeです。 、したがって、typeからCDATA(テキスト)を返します。 要素。
もう1つあります:
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user') AS "Result"; 結果:
+--------+ | Result | +--------+ | Homer | +--------+
この場合、XPathは/userです。 、などEXTRACTVALUE() userからCDATAを返します 要素。
iqが返されないことに注意してください 要素またはそのテキスト。 EXTRACTVALUE()であるため、これは予想されることです。 CDATAのみを返します。子要素や子要素に含まれる可能性のあるテキストは返されません。
text()式の使用
これは、明示的なtext()を追加して一致を取得するのと同じです。 式:
SELECT EXTRACTVALUE('<type>Cat</type>', '/type/text()') AS "Result"; 結果:
+--------+ | Result | +--------+ | Cat | +--------+
ネストされた要素
ネストされた要素からCDATAを取得する例を次に示します。
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user/iq') AS "Result"; 結果:
+--------+ | Result | +--------+ | Low | +--------+
ここでは、iqからCDATAを取得しました user内にネストされている要素 エレメント。これは、/user/iqを使用して実現しました。 XPathとして。
一致なし
そのような要素が存在しない場合、何も返されません。
例:
SELECT EXTRACTVALUE('<type>Cat</type>', '/name') AS "Result"; 結果:
+--------+ | Result | +--------+ | | +--------+
これは、ネストを間違えた場合にも当てはまります。
例:
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/iq') AS "Result"; 結果:
+--------+ | Result | +--------+ | | +--------+
ここでは、/iqを使用しました /user/iqを使用する必要がある場合のXPathとして 。
空のXML
空のXMLドキュメントは、空の結果を生成します:
SELECT EXTRACTVALUE('', '/name') AS "Result"; 結果:
+--------+ | Result | +--------+ | | +--------+
空のXPath
空のXPathはエラーを返します:
SELECT EXTRACTVALUE('<type>Cat</type>', ''); 結果:
ERROR 1105 (HY000): XPATH syntax error: ''
ヌルXML
nullを提供する 最初の引数がエラーになるため:
SELECT EXTRACTVALUE(null, ''); 結果:
ERROR 1105 (HY000): XPATH syntax error: ''
Null XPath
nullを提供する 2番目の引数がnullを返すため :
SELECT EXTRACTVALUE('<type>Cat</type>', null) AS "Result"; 結果:
+--------+ | Result | +--------+ | NULL | +--------+
引数を1つだけ提供する
引数を1つ指定すると、エラーが発生します:
SELECT EXTRACTVALUE('<type>Cat</type>'); 結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXTRACTVALUE'
引数がありません
EXTRACTVALUE()を呼び出す 引数を渡さないとエラーが発生します:
SELECT EXTRACTVALUE(); 結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXTRACTVALUE'
XMLの概要
XMLの詳細については、Quackitにある私のXMLチュートリアルを参照してください。このチュートリアルには、XPathの概要も含まれています。