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

पोस्टग्रेज में XML कॉलम से डेटा निकालने के लिए xpath का उपयोग करना

यह काम करता है:

WITH tbl(p_xml) AS (  -- CTE just to provide test table with xml value
   SELECT '<promotions xmlns="http://www.demandware.com/xml/impex/promotion/2008-01-31">
              <campaign campaign-id="2013-1st-semester-jet-giveaways">
                 <description>2013 1st Semester Jet Giveaways</description>
                 <enabled-flag>true</enabled-flag>
                 <start-date>2013-01-01T05:00:00.000Z</start-date>
                 <end-date>2013-07-01T04:00:00.000Z</end-date>
                 <customer-groups>
                    <customer-group group-id="Everyone"/>
                 </customer-groups>
              </campaign>
           </promotions>'::xml
    )  -- end of CTE, the rest is the solution
SELECT xpath('/n:promotions/n:campaign/n:description/text()', p_xml
           , '{{n,http://www.demandware.com/xml/impex/promotion/2008-01-31}}')
FROM   tbl;

रिटर्न:

{"2013 1st Semester Jet Giveaways"}

ध्यान दें कि मैं नामस्थान उपनाम कैसे निर्दिष्ट करता हूं एन <के तीसरे तर्क में आपके नाम स्थान के लिए कोड>एक्सपथ () और xpath के हर स्तर पर इसका उपयोग करें।

यदि आप दस्तावेज़ से XML नाम स्थान हटाते हैं, तो सब कुछ बहुत आसान हो जाता है:

WITH tbl(p_xml) AS (  -- not the missing namespace below
   SELECT '<promotions>
              <campaign campaign-id="2013-1st-semester-jet-giveaways">
                 <description>2013 1st Semester Jet Giveaways</description>
                 <enabled-flag>true</enabled-flag>
                 <start-date>2013-01-01T05:00:00.000Z</start-date>
                 <end-date>2013-07-01T04:00:00.000Z</end-date>
                 <customer-groups>
                    <customer-group group-id="Everyone"/>
                 </customer-groups>
              </campaign>
           </promotions>'::xml
   )
SELECT xpath('/promotions/campaign/description/text()', p_xml)
FROM   tbl;

<रेंट> क्या यह सिर्फ मैं हूं या सभी खुश हैं json कोड> और jsonb , इसलिए हमें 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. पीएल/पीजीएसक्यूएल के साथ निकटतम एक्स मिनट तक कैसे जाएं?

  2. search_path के संबंध में डिफ़ॉल्ट मान अभिव्यक्ति फ़ंक्शन कब/कैसे बाध्य हैं?

  3. मैं नए PostgreSQL JSON डेटाटाइप के अंदर फ़ील्ड का उपयोग करके क्वेरी कैसे करूं?

  4. गलती से हटाए गए डिफ़ॉल्ट सुपरयुसर विशेषाधिकार पोस्टग्रेज - क्या मैं इसे वापस प्राप्त कर सकता हूं?

  5. wal_keep_segments न्यूनतम, अधिकतम क्यों नहीं?