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の概要も含まれています。