PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL में xml टैग का मान निकालना

xpath() समारोह:

WITH x(col) AS (SELECT '<?xml version="1.0" ?><response><status>ERROR_MISSING_DATA</status></response>'::xml)
SELECT xpath('./status/text()', col) AS status
FROM   x

/text() आस-पास की पट्टी <status> टैग.
xml . की एक सरणी देता है - इस मामले में एक ही तत्व के साथ:

status
xml[]
-------
{ERROR_MISSING_DATA}

आपकी तालिका पर लागू

आपके प्रश्न अपडेट के जवाब में, यह बस हो सकता है:

SELECT id, xpath('./status/text()', response::xml) AS status
FROM   tbl;

यदि आप सुनिश्चित हैं कि प्रति पंक्ति केवल एक स्थिति टैग है, तो आप केवल सरणी से पहला आइटम निकाल सकते हैं:

SELECT id, (xpath('./status/text()', response::xml))[1] AS status
FROM   tbl;

अगर कई स्टेटस आइटम हो सकते हैं:

SELECT id, unnest(xpath('./status/text()', response::xml)) AS status
FROM   tbl;

आपको प्रति id . के लिए 1-n पंक्तियाँ प्राप्त करता है ।

xml पर कास्ट करें

चूंकि आपने अपने कॉलम को text . प्रकार के रूप में परिभाषित किया है (xml के बजाय , आपको जरूरत xml . पर डालने के लिए स्पष्ट रूप से। फंक्शन xpath() xml . प्रकार के दूसरे पैरामीटर की अपेक्षा करता है . टाइप न किए गए स्ट्रिंग स्थिरांक को xml . के साथ ज़बरदस्ती लगाया जाता है स्वचालित रूप से, लेकिन एक text स्तंभ नहीं है। आपको स्पष्ट रूप से कास्ट करने की आवश्यकता है।

यह स्पष्ट कलाकारों के बिना काम करता है:

  SELECT xpath('./status/text()'
      ,'<?xml version="1.0" ?><response><status>SUCCESS</status></response>')

एक सीटीई जैसे मेरे पहले उदाहरण में जरूरत "सामान्य तालिका अभिव्यक्ति" में प्रत्येक कॉलम के लिए एक प्रकार। यदि मैंने किसी विशिष्ट प्रकार के लिए नहीं डाला होता, तो टाइप unknown इस्तेमाल किया गया होगा - जो कि नहीं है अनटाइप्ड स्ट्रिंग . के समान ही . जाहिर है, unknown . के बीच कोई सीधा रूपांतरण लागू नहीं किया गया है और xml . आपको text में डालना होगा पहला:unknown_type_col::text::xml . ::xml में डालना बेहतर है तुरंत।

इसे PostgreSQL 9.1 (मुझे लगता है) के साथ कड़ा किया गया है। पुराने संस्करण अधिक अनुमेय थे।

किसी भी तरह से, इनमें से किसी भी तरीके से स्ट्रिंग को वैध xml . होना चाहिए या कास्ट (अंतर्निहित या स्पष्ट) एक अपवाद उठाएगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डुप्लिकेट कुंजी मान अद्वितीय बाधा का उल्लंघन करता है, CakePHP

  2. SSL मोड में PostgreSQL से कनेक्ट करने के लिए psql का उपयोग करना

  3. PostgreSQL में एकाधिक कॉलम कैसे अपडेट करें

  4. ग्रीनप्लम में gpload उपयोगिता

  5. कोई बफर स्पेस उपलब्ध नहीं है (अधिकतम कनेक्शन तक पहुंच गया है?) फॉर्म पोस्टग्रेज ईडीबी ड्राइवर