मारियाडीबी में, EXTRACTVALUE()
एक अंतर्निहित स्ट्रिंग फ़ंक्शन है जो सीडीएटीए को एक्सएमएल खंड से लौटाता है।
जिस तरह से यह काम करता है वह दो स्ट्रिंग तर्कों को स्वीकार करता है:एक्सएमएल मार्कअप का एक टुकड़ा और एक XPath अभिव्यक्ति (यानी एक लोकेटर)। EXTRACTVALUE()
फिर पहले टेक्स्ट नोड का सीडीएटीए (यानी टेक्स्ट) लौटाता है जो कि XPath अभिव्यक्ति से मेल खाने वाले तत्व या तत्वों का एक बच्चा है।
सिंटैक्स
वाक्य रचना इस प्रकार है:
EXTRACTVALUE(xml_frag, xpath_expr)
जहां xml_frag
XML खंड है, और xpath_expr
मिलान करने के लिए XPath व्यंजक है।
उदाहरण
यहां एक बुनियादी उदाहरण दिया गया है:
SELECT EXTRACTVALUE('<type>Cat</type>', '/type') AS "Result";
परिणाम:
+--------+ | Result | +--------+ | Cat | +--------+
इस मामले में, XPath /type
. है , और इसलिए यह type
. से सीडीएटीए (टेक्स्ट) लौटाता है तत्व।
यहाँ एक और है:
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user') AS "Result";
परिणाम:
+--------+ | Result | +--------+ | Homer | +--------+
इस मामले में, XPath /user
है , और इसलिए EXTRACTVALUE()
user
. से सीडीएटीए लौटाता है तत्व।
ध्यान दें कि इसने iq
वापस नहीं किया तत्व या उसका पाठ। यह अपेक्षित है, क्योंकि EXTRACTVALUE()
केवल सीडीएटीए लौटाता है। यह किसी भी बाल तत्व या उनमें शामिल किसी भी पाठ को वापस नहीं करता है।
पाठ का उपयोग करना() अभिव्यक्ति
यह स्पष्ट text()
. को जोड़कर एक मैच प्राप्त करने के बराबर है अभिव्यक्ति:
SELECT EXTRACTVALUE('<type>Cat</type>', '/type/text()') AS "Result";
परिणाम:
+--------+ | Result | +--------+ | Cat | +--------+
नेस्टेड तत्व
नेस्टेड तत्व से सीडीएटीए प्राप्त करने का एक उदाहरण यहां दिया गया है:
SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user/iq') AS "Result";
परिणाम:
+--------+ | Result | +--------+ | Low | +--------+
यहां, हमें सीडीएटीए iq
. से मिला है तत्व, जो 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
. का प्रयोग किया है XPath के रूप में जब हमें /user/iq
. का उपयोग करना चाहिए था ।
रिक्त 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: ''
शून्य XPath
null
प्रदान करना जैसा कि दूसरा तर्क देता है null
:
SELECT EXTRACTVALUE('<type>Cat</type>', null) AS "Result";
परिणाम:
+--------+ | Result | +--------+ | NULL | +--------+
सिर्फ एक तर्क देना
एकल तर्क देने से त्रुटि होती है:
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'
एक्सएमएल का परिचय
एक्सएमएल के बारे में अधिक जानकारी के लिए, मेरा एक्सएमएल ट्यूटोरियल क्वैकिट पर देखें। उस ट्यूटोरियल में XPath का परिचय भी शामिल है।